# HG changeset patch # User Gerd Moellmann # Date 995282425 0 # Node ID 3960fdb54cfd38276f5a9e4a909d746ec92775d3 # Parent 2f7764f15a236d0378ae48b6f56d3ae2e9ed002f (main): Check that the output file exists and is non-empty if invoked with `--append'. diff -r 2f7764f15a23 -r 3960fdb54cfd lib-src/ebrowse.c --- 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) {