/* * C version by Wessel Dankers * * This code is in the public domain. * */ #include #include #include #include void print_usage (const char *progname) { fprintf (stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", progname); exit (1); } int main (int argc, char **argv) { char **opts, **opt, *pfx; int i; if (argc <= 1) { print_usage (argv[0]); } opts = malloc ((2 * argc + 1) * sizeof (*opts)); /* __MEM_CHECKED__ */ if (!opts) { perror (argv[0]); exit (2); } if (argc < 2) { fprintf (stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", argv[0]); return 1; } opt = opts; *opt++ = argv[1]; pfx = NULL; for (i = 2; i < argc;) { if (!strcmp (argv[i], "--")) { i += 2; if (i > argc) { print_usage (argv[0]); } pfx = argv[i - 1]; } if (pfx) *opt++ = pfx; *opt++ = argv[i++]; } *opt = NULL; execvp (opts[0], opts); perror (argv[0]); return 2; }