1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-09 00:06:42 +02:00

pack-objects: be incredibly anal about stdio semantics

This is the "letter of the law" version of using fgets() properly in the
face of incredibly broken stdio implementations.  We can work around the
Solaris breakage with SA_RESTART, but in case anybody else is ever that
stupid, here's the "safe" (read: "insanely anal") way to use fgets.

It probably goes without saying that I'm not terribly impressed by
Solaris libc.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Linus Torvalds 2006-04-02 13:31:54 -07:00 committed by Junio C Hamano
parent fb7a6531e6
commit da93d12b00

View File

@ -905,11 +905,21 @@ int main(int argc, char **argv)
setup_progress_signal();
}
while (fgets(line, sizeof(line), stdin) != NULL) {
for (;;) {
unsigned int hash;
char *p;
unsigned char sha1[20];
if (!fgets(line, sizeof(line), stdin)) {
if (feof(stdin))
break;
if (!ferror(stdin))
die("fgets returned NULL, not EOF, not error!");
if (errno == EINTR)
continue;
die("fgets: %s", strerror(errno));
}
if (progress_update) {
fprintf(stderr, "Counting objects...%d\r", nr_objects);
progress_update = 0;