From: Jonathan Amery Date: Mon, 6 Oct 2014 11:59:10 +0000 (+0100) Subject: Merge branch 'master' into merge-141006 X-Git-Tag: debian/4.4.0~8^2~6 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=4279c63e7667011e81eeba843c9b634ec2265115;p=chiark-utils.git Merge branch 'master' into merge-141006 Conflicts: acctdump.c --- 4279c63e7667011e81eeba843c9b634ec2265115 diff --cc cprogs/acctdump.c index e1b7674,fbf7ead..98fab9c --- a/cprogs/acctdump.c +++ b/cprogs/acctdump.c @@@ -270,7 -275,8 +280,8 @@@ static void printrecord(const struct_ac } static void processfile(FILE *file, const char *filename) { + struct_acct as; + long pos; - struct acct as; int r; if (forwards) { @@@ -278,18 -284,19 +289,21 @@@ printrecord(&as,filename); } } else { + long seekdist= -(long)sizeof(as); r= fseek(file,0,SEEK_END); if (r) { perror(filename); exit(8); } + pos= ftell(file); if (pos==-1) { perror(filename); exit(8); } + if (pos % sizeof(as)) { + fprintf(stderr, "%s: File size is not an integral number " + "of accounting records", filename); + exit(8); + } for (;;) { - r= fseek(file,seekdist,SEEK_CUR); - if (r) { - if (errno=EINVAL) break; - perror(filename); exit(8); - } - r= fread(&as,1,sizeof(as),file); - if (r!=sizeof(as)) { perror(filename); exit(8); } + if (pos