env.c - sbase - suckless unix tools
 (HTM) git clone git://git.suckless.org/sbase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       env.c (819B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <errno.h>
            3 #include <stdio.h>
            4 #include <stdlib.h>
            5 #include <string.h>
            6 #include <unistd.h>
            7 
            8 #include "util.h"
            9 
           10 extern char **environ;
           11 
           12 static void
           13 usage(void)
           14 {
           15         eprintf("usage: %s [-i] [-u var] ... [var=value] ... [cmd [arg ...]]\n", argv0);
           16 }
           17 
           18 int
           19 main(int argc, char *argv[])
           20 {
           21         int savederrno;
           22 
           23         ARGBEGIN {
           24         case 'i':
           25                 *environ = NULL;
           26                 break;
           27         case 'u':
           28                 if (unsetenv(EARGF(usage())) < 0)
           29                         eprintf("unsetenv:");
           30                 break;
           31         default:
           32                 usage();
           33         } ARGEND
           34 
           35         for (; *argv && strchr(*argv, '='); argc--, argv++)
           36                 putenv(*argv);
           37 
           38         if (*argv) {
           39                 execvp(*argv, argv);
           40                 savederrno = errno;
           41                 weprintf("execvp %s:", *argv);
           42                 _exit(126 + (savederrno == ENOENT));
           43         }
           44 
           45         for (; *environ; environ++)
           46                 puts(*environ);
           47 
           48         return fshut(stdout, "<stdout>");
           49 }