Lines 512-560
unwrap(struct magic_set *ms, const char *fn)
Link Here
|
512 |
size_t llen = 0; |
512 |
size_t llen = 0; |
513 |
int wid = 0, cwid; |
513 |
int wid = 0, cwid; |
514 |
int e = 0; |
514 |
int e = 0; |
515 |
size_t fi = 0, fimax = 100; |
|
|
516 |
char **flist = CAST(char **, malloc(sizeof(*flist) * fimax)); |
517 |
|
515 |
|
518 |
if (flist == NULL) |
516 |
if (strcmp("-", fn) == 0) { |
519 |
out: file_err(EXIT_FAILURE, "Cannot allocate memory for file list"); |
|
|
520 |
|
521 |
if (strcmp("-", fn) == 0) |
522 |
f = stdin; |
517 |
f = stdin; |
523 |
else { |
518 |
wid = 1; |
|
|
519 |
} else { |
524 |
if ((f = fopen(fn, "r")) == NULL) { |
520 |
if ((f = fopen(fn, "r")) == NULL) { |
525 |
file_warn("Cannot open `%s'", fn); |
521 |
file_warn("Cannot open `%s'", fn); |
526 |
return 1; |
522 |
return 1; |
527 |
} |
523 |
} |
|
|
524 |
|
525 |
while ((len = getline(&line, &llen, f)) > 0) { |
526 |
if (line[len - 1] == '\n') |
527 |
line[len - 1] = '\0'; |
528 |
cwid = file_mbswidth(ms, line); |
529 |
if (cwid > wid) |
530 |
wid = cwid; |
531 |
} |
532 |
|
533 |
rewind(f); |
528 |
} |
534 |
} |
529 |
|
535 |
|
530 |
while ((len = getline(&line, &llen, f)) > 0) { |
536 |
while ((len = getline(&line, &llen, f)) > 0) { |
531 |
if (line[len - 1] == '\n') |
537 |
if (line[len - 1] == '\n') |
532 |
line[len - 1] = '\0'; |
538 |
line[len - 1] = '\0'; |
533 |
if (fi >= fimax) { |
539 |
e |= process(ms, line, wid); |
534 |
fimax += 100; |
|
|
535 |
char **nf = CAST(char **, |
536 |
realloc(flist, fimax * sizeof(*flist))); |
537 |
if (nf == NULL) |
538 |
goto out; |
539 |
flist = nf; |
540 |
} |
541 |
flist[fi++] = line; |
542 |
cwid = file_mbswidth(ms, line); |
543 |
if (cwid > wid) |
544 |
wid = cwid; |
545 |
line = NULL; |
546 |
llen = 0; |
547 |
} |
540 |
} |
548 |
|
541 |
|
549 |
fimax = fi; |
542 |
free(line); |
550 |
for (fi = 0; fi < fimax; fi++) { |
543 |
(void)fclose(f); |
551 |
e |= process(ms, flist[fi], wid); |
|
|
552 |
free(flist[fi]); |
553 |
} |
554 |
free(flist); |
555 |
|
556 |
if (f != stdin) |
557 |
(void)fclose(f); |
558 |
return e; |
544 |
return e; |
559 |
} |
545 |
} |
560 |
|
546 |
|