Mercurial > emacs
changeset 38429:3960fdb54cfd
(main): Check that the output file exists and
is non-empty if invoked with `--append'.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 16 Jul 2001 11:20:25 +0000 |
parents | 2f7764f15a23 |
children | f8ffa9c41f7a |
files | lib-src/ebrowse.c |
diffstat | 1 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lib-src/ebrowse.c Mon Jul 16 10:54:22 2001 +0000 +++ b/lib-src/ebrowse.c Mon Jul 16 11:20:25 2001 +0000 @@ -3495,7 +3495,7 @@ #define USAGE "\ Usage: ebrowse [options] {files}\n\ \n\ - -a, --append append output\n\ + -a, --append append output to existing file\n\ -f, --files=FILES read input file names from FILE\n\ -I, --search-path=LIST set search path for input files\n\ -m, --min-regexp-length=N set minimum regexp length to N\n\ @@ -3740,6 +3740,32 @@ /* Open output file */ if (*out_filename) { + if (f_append) + { + /* Check that the file to append to exists, and is not + empty. More specifically, it should be a valid file + produced by a vaprevious run of ebrowse, but that's too + difficult to check. */ + FILE *fp; + int rc; + + fp = fopen (out_filename, "r"); + if (fp == NULL) + yyerror ("file `%s' must exist for --append", out_filename); + + rc = fseek (fp, 0, SEEK_END); + if (rc == -1) + yyerror ("error seeking in file `%s'", out_filename); + + rc = ftell (fp); + if (rc == -1) + yyerror ("error getting size of file `%s'", out_filename); + else if (rc == 0) + yyerror ("file `%s' is empty", out_filename); + + fclose (fp); + } + yyout = fopen (out_filename, f_append ? "a" : "w"); if (yyout == NULL) {