at master 769 B view raw
1#define _GNU_SOURCE /* See feature_test_macros(7) */ 2#include <unistd.h> 3#include <stdlib.h> 4#include <assert.h> 5#include <stdio.h> 6 7#define assert_success(e) do { if ((e) < 0) { perror(#e); abort(); } } while (0) 8 9void set_env_prefix(char *env, char *sep, char *prefix) { 10 char *existing = getenv(env); 11 if (existing) { 12 char *val; 13 assert_success(asprintf(&val, "%s%s%s", prefix, sep, existing)); 14 assert_success(setenv(env, val, 1)); 15 free(val); 16 } else { 17 assert_success(setenv(env, prefix, 1)); 18 } 19} 20 21int main(int argc, char **argv) { 22 set_env_prefix("PATH", ":", "/usr/bin/"); 23 set_env_prefix("PATH", ":", "/usr/local/bin/"); 24 argv[0] = "/send/me/flags"; 25 return execv("/send/me/flags", argv); 26}