View | Details | Raw Unified | Return to bug 267221 | Differences between
and this patch

Collapse All | Expand All

(-)contrib/file/src/file.c (-30 / +16 lines)
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

Return to bug 267221