commit - 3216929ceb74f6dab10df9014ee08eefdb6283ca
commit + ed974584dc2333c95ff73381a62a8fbf90e108d1
blob - 530b9e79bba923238e50412505947f74495a90a7
blob + 2f891ac2b81055d02f696257fc354a63a24acf0c
--- FICS/utils.c
+++ FICS/utils.c
PUBLIC int
mail_file_to_address(char *addr, char *subj, char *fname)
{
- FILE *fp1, *fp2;
+ FILE *fp[2] = { NULL, NULL };
char com[1000] = { '\0' };
char tmp[MAX_LINE_SIZE] = { '\0' };
+ int ret;
/* maybe unused */
- (void) fp2;
(void) tmp;
#ifdef SENDMAILPROG
- snprintf(com, sizeof com, "%s %s\n", SENDMAILPROG, SENDMAILPROG_ARGS);
+ ret = snprintf(com, sizeof com, "%s %s\n", SENDMAILPROG,
+ SENDMAILPROG_ARGS);
#else
- snprintf(com, sizeof com, "%s -s \"%s\" %s < %s&", MAILPROGRAM, subj,
- addr, fname);
+ ret = snprintf(com, sizeof com, "%s -s \"%s\" %s < %s&", MAILPROGRAM,
+ subj, addr, fname);
#endif
- if ((fp1 = popen(com, "w")) == NULL)
+
+ if (ret < 0 || (size_t)ret >= sizeof com) {
+ warnx("%s: command too long", __func__);
return -1;
+ }
+
+ if ((fp[0] = popen(com, "w")) == NULL)
+ return -1;
+
#ifdef SENDMAILPROG
- if ((fp2 = fopen(fname, "r")) == NULL) {
- pclose(fp1);
+ if ((fp[1] = fopen(fname, "r")) == NULL) {
+ (void) pclose(fp[0]);
return -1;
}
- fprintf(fp1, "To: %s\nSubject: %s\n", addr, subj);
+ ret = fprintf(fp[0], "To: %s\nSubject: %s\n", addr, subj);
- while (fgets(tmp, sizeof tmp, fp2) != NULL && !feof(fp2))
- fputs(tmp, fp1);
- fclose(fp2);
+ if (ret < 0)
+ warnx("%s: fprintf() error", __func__);
+
+ while (fgets(tmp, sizeof tmp, fp[1]) != NULL &&
+ fputs(tmp, fp[0]) != EOF) {
+ /* null */;
+ }
+
+ if (fclose(fp[1]) != 0)
+ warn("%s: fclose() error", __func__);
#endif
- pclose(fp1);
+
+ if (pclose(fp[0]) == -1)
+ warn("%s: pclose() error", __func__);
return 0;
}