/* (c) Connor Lane Smith, 2015 */ #include #include #include #include int main(int argc, char **argv) { if(argc < 3) { fprintf(stderr, "usage: %s flag cmd ...\n", argv[0]); return 2; } char *xembed = getenv("XEMBED"); if(!xembed) goto noembed; int tty = open("/dev/tty", O_RDONLY); if(tty < 0) goto noembed; pid_t pgrp = getpgrp(); pid_t tcpgrp = tcgetpgrp(tty); close(tty); if(pgrp == tcpgrp) { // in foreground of tty argv[0] = argv[2]; argv[2] = xembed; } else { noembed: argv += 2; } execvp(argv[0], argv); perror(argv[0]); // failed to execute return 1; }