imap-send: correctly report errors reading from stdin
Previously, read_message() didn't distinguish between an error and eof when reading its input. This could have resulted in incorrect behavior if there was an error: (1) reporting "nothing to send" if no bytes were read or (2) sending an incomplete message if some bytes were read before the error. Change read_message() to return -1 on ferror()s and 0 on success, so that the caller can recognize that an error occurred. (The return value used to be the length of the input read, which was redundant because that is already available as the strbuf length. Change the caller to report errors correctly. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3a34e62684
commit
6360bee4cd
@ -1398,7 +1398,7 @@ static int read_message(FILE *f, struct strbuf *all_msgs)
|
|||||||
break;
|
break;
|
||||||
} while (!feof(f));
|
} while (!feof(f));
|
||||||
|
|
||||||
return all_msgs->len;
|
return ferror(f) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int count_messages(struct strbuf *all_msgs)
|
static int count_messages(struct strbuf *all_msgs)
|
||||||
@ -1537,7 +1537,12 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* read the messages */
|
/* read the messages */
|
||||||
if (!read_message(stdin, &all_msgs)) {
|
if (read_message(stdin, &all_msgs)) {
|
||||||
|
fprintf(stderr, "error reading input\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (all_msgs.len == 0) {
|
||||||
fprintf(stderr, "nothing to send\n");
|
fprintf(stderr, "nothing to send\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user