From 8e4b384ede1be7af9576d87462fd1c91646b8154 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 16 Jul 2001 11:20:25 +0000 Subject: [PATCH] (main): Check that the output file exists and is non-empty if invoked with `--append'. --- lib-src/ebrowse.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c index 90388273cec..29eff708325 100644 --- a/lib-src/ebrowse.c +++ b/lib-src/ebrowse.c @@ -3495,7 +3495,7 @@ open_file (file) #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 @@ main (argc, argv) /* 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) { -- 2.39.2