autostart: upgrading to dwm-autostart-20210120-cb3f58a.diff

pull/301/head
bakkeby 2 years ago
parent 6a0e5b884e
commit d6205e3e89

@ -5,18 +5,19 @@ runautostart(void)
char *path; char *path;
char *xdgdatahome; char *xdgdatahome;
char *home; char *home;
struct stat sb;
if ((home = getenv("HOME")) == NULL) if ((home = getenv("HOME")) == NULL)
/* this is almost impossible */ /* this is almost impossible */
return; return;
/* if $XDG_DATA_HOME is defined, use $XDG_DATA_HOME/dwm, /* if $XDG_DATA_HOME is set and not empty, use $XDG_DATA_HOME/dwm,
* otherwise use ~/.local/share/dwm as autostart script directory * otherwise use ~/.local/share/dwm as autostart script directory
*/ */
if ((xdgdatahome = getenv("XDG_DATA_HOME")) != NULL) { xdgdatahome = getenv("XDG_DATA_HOME");
if (xdgdatahome != NULL && *xdgdatahome != '\0') {
/* space for path segments, separators and nul */ /* space for path segments, separators and nul */
if ((pathpfx = malloc(strlen(xdgdatahome) + strlen(dwmdir) + 2)) == NULL) pathpfx = ecalloc(1, strlen(xdgdatahome) + strlen(dwmdir) + 2);
return;
if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) { if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) {
free(pathpfx); free(pathpfx);
@ -24,8 +25,8 @@ runautostart(void)
} }
} else { } else {
/* space for path segments, separators and nul */ /* space for path segments, separators and nul */
if ((pathpfx = malloc(strlen(home) + strlen(localshare) + strlen(dwmdir) + 3)) == NULL) pathpfx = ecalloc(1, strlen(home) + strlen(localshare)
return; + strlen(dwmdir) + 3);
if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) { if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) {
free(pathpfx); free(pathpfx);
@ -34,16 +35,16 @@ runautostart(void)
} }
/* check if the autostart script directory exists */ /* check if the autostart script directory exists */
struct stat sb;
if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) { if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) {
/* the XDG conformant path does not exist or are not directories /* the XDG conformant path does not exist or is no directory
* so we try ~/.dwm instead * so we try ~/.dwm instead
*/ */
if (realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3) == NULL) { char *pathpfx_new = realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3);
if(pathpfx_new == NULL) {
free(pathpfx); free(pathpfx);
return; return;
} }
pathpfx = pathpfx_new;
if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) { if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) {
free(pathpfx); free(pathpfx);
@ -52,33 +53,24 @@ runautostart(void)
} }
/* try the blocking script first */ /* try the blocking script first */
if ((path = malloc(strlen(pathpfx) + strlen(autostartblocksh) + 2)) == NULL) { path = ecalloc(1, strlen(pathpfx) + strlen(autostartblocksh) + 2);
if (sprintf(path, "%s/%s", pathpfx, autostartblocksh) <= 0) {
free(path);
free(pathpfx); free(pathpfx);
return; }
} else
if (sprintf(path, "%s/%s", pathpfx, autostartblocksh) <= 0) {
free(path);
free(pathpfx);
}
if (access(path, X_OK) == 0) if (access(path, X_OK) == 0)
system(path); system(path);
/* now the non-blocking script */ /* now the non-blocking script */
if ((path = realloc(path, strlen(pathpfx) + strlen(autostartsh) + 4)) == NULL) { if (sprintf(path, "%s/%s", pathpfx, autostartsh) <= 0) {
free(pathpfx);
free(path); free(path);
return;
} else
if (sprintf(path, "%s/%s", pathpfx, autostartsh) <= 0) {
free(path);
free(pathpfx);
}
if (access(path, X_OK) == 0) {
system(strcat(path, " &"));
free(pathpfx); free(pathpfx);
free(path);
} }
}
if (access(path, X_OK) == 0)
system(strcat(path, " &"));
free(pathpfx);
free(path);
}

Loading…
Cancel
Save