зеркало из https://github.com/microsoft/git.git
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:
Родитель
fb7a6531e6
Коммит
da93d12b00
|
@ -905,11 +905,21 @@ int main(int argc, char **argv)
|
||||||
setup_progress_signal();
|
setup_progress_signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), stdin) != NULL) {
|
for (;;) {
|
||||||
unsigned int hash;
|
unsigned int hash;
|
||||||
char *p;
|
char *p;
|
||||||
unsigned char sha1[20];
|
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) {
|
if (progress_update) {
|
||||||
fprintf(stderr, "Counting objects...%d\r", nr_objects);
|
fprintf(stderr, "Counting objects...%d\r", nr_objects);
|
||||||
progress_update = 0;
|
progress_update = 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче