smdev SMDEV environment fix and small optimization - smdev - suckless mdev
 (HTM) git clone git://git.suckless.org/smdev
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 7550047abc4f7db1da453ae8927866b512f95a03
 (DIR) parent ddacaa6b20569d4fb4be3de615434f5f59fe9b28
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sun,  6 Apr 2014 15:59:39 +0200
       
       smdev SMDEV environment fix and small optimization
       
       Use setenv() with overwrite flag to set environment variable. This fixes an issue where SMDEV was still set to a previous rule environment (symlinked my /dev/cdrom to usb2 :)).
       Optimization: check if rule->cmd is set, else don't change directory to /dev and don't set the environment variable.
       
       Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
       
       Diffstat:
         M smdev.c                             |      30 ++++++++++++++----------------
       
       1 file changed, 14 insertions(+), 16 deletions(-)
       ---
 (DIR) diff --git a/smdev.c b/smdev.c
       @@ -223,14 +223,13 @@ removedev(struct event *ev)
        
                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(rule->cmd) {
       +                if (chdir("/dev") < 0)
       +                        eprintf("chdir /dev:");
       +                if (setenv("SMDEV", ev->devname, 1) < 0)
       +                        eprintf("setenv:");
       +                runrulecmd(rule);
       +        }
        
                if (chdir(ocwd) < 0)
                        eprintf("chdir %s:", ocwd);
       @@ -313,14 +312,13 @@ createdev(struct event *ev)
                }
        
        runrule:
       -        if (chdir("/dev") < 0)
       -                eprintf("chdir /dev:");
       -
       -        snprintf(buf, sizeof(buf), "SMDEV=%s", ev->devname);
       -        if (putenv(buf) < 0)
       -                eprintf("putenv:");
       -
       -        runrulecmd(rule);
       +        if(rule->cmd) {
       +                if (chdir("/dev") < 0)
       +                        eprintf("chdir /dev:");
       +                if (setenv("SMDEV", ev->devname, 1) < 0)
       +                        eprintf("setenv:");
       +                runrulecmd(rule);
       +        }
        
                if (chdir(ocwd) < 0)
                        eprintf("chdir %s:", ocwd);