$SMDEV points to device name - smdev - suckless mdev
 (HTM) git clone git://git.suckless.org/smdev
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4493e6f0efa782693f55b062e02d246a257efddf
 (DIR) parent 6599c9ea656da6b55aa06257c656ed85362964d7
 (HTM) Author: sin <sin@2f30.org>
       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(-)
       ---
 (DIR) 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;
        }