newterm.c - st - [fork] simple terminal
 (HTM) git clone https://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       newterm.c (482B)
       ---
            1 extern char* argv0;
            2 
            3 static char*
            4 getcwd_by_pid(pid_t pid) {
            5         static char cwd[32];
            6         snprintf(cwd, sizeof cwd, "/proc/%d/cwd", pid);
            7         return cwd;
            8 }
            9 
           10 void
           11 newterm(const Arg* a)
           12 {
           13         switch (fork()) {
           14         case -1:
           15                 die("fork failed: %s\n", strerror(errno));
           16                 break;
           17         case 0:
           18                 switch (fork()) {
           19                 case -1:
           20                         die("fork failed: %s\n", strerror(errno));
           21                         break;
           22                 case 0:
           23                         chdir(getcwd_by_pid(pid));
           24 
           25                         execl("/proc/self/exe", argv0, NULL);
           26                         exit(1);
           27                 default:
           28                         exit(0);
           29                 }
           30         }
           31 }