FILE *
fn_open (const char *fn, const char *mode)
{
- assert (mode[0] == 'r' || mode[0] == 'w');
+ assert (mode[0] == 'r' || mode[0] == 'w' || mode[0] == 'a');
if (mode[0] == 'r' && (!strcmp (fn, "stdin") || !strcmp (fn, "-")))
return stdin;
if (get_safer_mode ())
return safety_violation (fn);
- return popen (&fn[1], mode);
+ return popen (&fn[1], mode[0] == 'r' ? "r" : "w");
}
else if (*fn && fn[strlen (fn) - 1] == '|')
{
memcpy (s, fn, strlen (fn) - 1);
s[strlen (fn) - 1] = 0;
- f = popen (s, mode);
+ f = popen (s, mode[0] == 'r' ? "r" : "w");
local_free (s);