mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
autostart: upgrading to dwm-autostart-20210120-cb3f58a.diff
This commit is contained in:
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…
Reference in New Issue
Block a user