Mercurial > mplayer.hg
view liba52/compare.c @ 9177:01a713dcaf23
disable free() in string and string_list parsers. yes, it's a hack
(and a little memleak), but i can explain :)
[note it's just a few kB memleak, but it's the price of stability without
full code review/audit - there are hunderds of possible double free()]
the old config parser didn't free() strings/stringlists, but didn't even
allocate them by default. the new one always free(), and it causes
memcorruption/sig11 at cases like this:
char* dvd_device="/dev/dvd";
{"dvd-device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
since string constansts (allocated in .TEXT segment) cannot be free()'d
author | arpi |
---|---|
date | Thu, 30 Jan 2003 21:28:01 +0000 |
parents | aed9850ca011 |
children | 6ade61b852eb |
line wrap: on
line source
// File written by Michael Niedermayer and its under GPL // simple file compare program, it finds the number of rounding errors // and dies if there is a larger error ( ABS(a-b)>1 ) #include <stdio.h> // FIXME no checks but its just for debuging so who cares ;) int main(int argc, char **argv) { FILE *f0, *f1; int dif=0; if(argc!=3) { printf("compare <file1> <file2>\n"); exit(2); } f0= fopen(argv[1], "rb"); f1= fopen(argv[2], "rb"); for(;;) { short c0; short c1; int d; int e0= fread(&c0, 2, 1, f0); int e1= fread(&c1, 2, 1, f1); d=c0-c1; if(e0==0 && e1==0) break; if(e0==0 || e1==0) { printf("FATAL error, files have different size!\n"); exit(1); } if(d<0) d=-d; // ABS if(d>1) { printf("FATAL error, too large differnce found (%d)!\n", d); exit(1); } if(d) dif++; } fclose(f0); fclose(f1); printf("%d (+/-1)differences found\n", dif); exit(0); }