$SMDEV points to device name - smdev - suckless mdev | |
git clone git://git.suckless.org/smdev | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4493e6f0efa782693f55b062e02d246a257efddf | |
parent 6599c9ea656da6b55aa06257c656ed85362964d7 | |
Author: sin <[email protected]> | |
Date: Mon, 2 Sep 2013 10:21:50 +0100 | |
$SMDEV points to device name | |
Export $SMDEV for removedev() as well | |
Diffstat: | |
M smdev.c | 33 +++++++++++++++++++++++++++--… | |
1 file changed, 29 insertions(+), 4 deletions(-) | |
--- | |
diff --git a/smdev.c b/smdev.c | |
@@ -210,6 +210,7 @@ removedev(struct event *ev) | |
{ | |
struct rule *rule; | |
struct rulepath rpath; | |
+ char *ocwd; | |
char buf[PATH_MAX]; | |
rule = ev->rule; | |
@@ -217,8 +218,24 @@ removedev(struct event *ev) | |
if (rule->path && rule->path[0] == '!') | |
return 0; | |
+ ocwd = agetcwd(); | |
+ | |
parsepath(rule, &rpath, ev->devname); | |
+ | |
+ if (chdir("/dev") < 0) | |
+ eprintf("chdir /dev:"); | |
+ | |
+ snprintf(buf, sizeof(buf), "SMDEV=%s", ev->devname); | |
+ if (putenv(buf) < 0) | |
+ eprintf("putenv:"); | |
+ | |
runrulecmd(rule); | |
+ | |
+ if (chdir(ocwd) < 0) | |
+ eprintf("chdir %s:", ocwd); | |
+ | |
+ free(ocwd); | |
+ | |
/* Delete device node */ | |
unlink(rpath.path); | |
/* Delete symlink */ | |
@@ -236,7 +253,7 @@ createdev(struct event *ev) | |
struct rulepath rpath; | |
struct passwd *pw; | |
struct group *gr; | |
- char *dirc; | |
+ char *dirc, *ocwd; | |
char buf[BUFSIZ]; | |
int type; | |
@@ -249,6 +266,8 @@ createdev(struct event *ev) | |
if ((type = devtype(buf)) < 0) | |
return -1; | |
+ ocwd = agetcwd(); | |
+ | |
/* Parse path and create the directory tree */ | |
parsepath(rule, &rpath, ev->devname); | |
if (!(dirc = strdup(rpath.path))) | |
@@ -292,14 +311,20 @@ createdev(struct event *ev) | |
buf, rpath.path); | |
} | |
- snprintf(buf, sizeof(buf), "SMDEV=%s", rpath.path); | |
+ if (chdir("/dev") < 0) | |
+ eprintf("chdir /dev:"); | |
+ | |
+ snprintf(buf, sizeof(buf), "SMDEV=%s", ev->devname); | |
if (putenv(buf) < 0) | |
eprintf("putenv:"); | |
- /* XXX: should chdir to dirname(devpath) and set SMDEV | |
- * to point to the actual device name */ | |
runrulecmd(rule); | |
+ if (chdir(ocwd) < 0) | |
+ eprintf("chdir %s:", ocwd); | |
+ | |
+ free(ocwd); | |
+ | |
return 0; | |
} | |