- {
- int i;
- for (i = 0; i < file_names_count; i++)
- if (0 == strcmp (file_names[i], file_name))
- warn (_("conflicting outputs to file %s"), quote (file_name));
- }
- file_names = xnrealloc (file_names, ++file_names_count, sizeof *file_names);
- file_names[file_names_count-1] = xstrdup (file_name);
+ bool conflict = false;
+ if (STREQ (*file_name, grammar_file))
+ {
+ complain (_("refusing to overwrite the input file %s"),
+ quote (*file_name));
+ conflict = true;
+ }
+ else
+ {
+ int i;
+ for (i = 0; i < file_names_count; i++)
+ if (STREQ (file_names[i], *file_name))
+ {
+ warn (_("conflicting outputs to file %s"),
+ quote (*file_name));
+ conflict = true;
+ }
+ }
+ if (conflict)
+ {
+ free (*file_name);
+ *file_name = strdup ("/dev/null");
+ }
+ else
+ {
+ file_names = xnrealloc (file_names, ++file_names_count,
+ sizeof *file_names);
+ file_names[file_names_count-1] = xstrdup (*file_name);
+ }