aboutsummaryrefslogtreecommitdiff
path: root/libsylph/procmime.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-09-13 03:00:54 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-09-13 03:00:54 +0000
commitd7a5fbadd02bc9e47459c6280cdfd20d18620803 (patch)
treeca0803e86c02505bb1f96504b7306ca8b1b4b1b7 /libsylph/procmime.c
parent4d9afa7a09f676b976a048393456af5f8dbe90e2 (diff)
procmime_decode_content(): fflush temporary file and check errors.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1154 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/procmime.c')
-rw-r--r--libsylph/procmime.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libsylph/procmime.c b/libsylph/procmime.c
index 193c23e0..98088ad6 100644
--- a/libsylph/procmime.c
+++ b/libsylph/procmime.c
@@ -829,6 +829,12 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo)
}
if (normalize_lbreak) {
+ if (fflush(tmpfp) == EOF) {
+ perror("fflush");
+ fclose(tmpfp);
+ if (tmp_file) fclose(outfp);
+ return NULL;
+ }
rewind(tmpfp);
while (fgets(buf, sizeof(buf), tmpfp) != NULL) {
#ifdef G_OS_WIN32
@@ -872,6 +878,12 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo)
base64_decoder_free(decoder);
if (normalize_lbreak) {
+ if (fflush(tmpfp) == EOF) {
+ perror("fflush");
+ fclose(tmpfp);
+ if (tmp_file) fclose(outfp);
+ return NULL;
+ }
rewind(tmpfp);
while (fgets(buf, sizeof(buf), tmpfp) != NULL) {
#ifdef G_OS_WIN32
@@ -924,6 +936,14 @@ FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo)
}
}
+ if (fflush(outfp) == EOF)
+ perror("fflush");
+ if (ferror(outfp) != 0) {
+ g_warning("procmime_decode_content(): Can't write to temporary file\n");
+ if (tmp_file) fclose(outfp);
+ return NULL;
+ }
+
if (tmp_file) rewind(outfp);
return outfp;
}