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}