gcc warning as follows:
textarea.c: In function 'save_textarea_file':
textarea.c:305: warning: ignoring return value of 'fwrite', declared with 
attribute warn_unused_result

Check fwrite() and fclose() return values.
Also unlink temporary file on error conditions.

This routine is now very similar to user.c:save_form_data_to_file().
Maybe they should be factored.
---
 src/viewer/text/textarea.c |   33 +++++++++++++++++++++++++--------
 1 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/viewer/text/textarea.c b/src/viewer/text/textarea.c
index bbc58dc..7e2ac2d 100644
--- a/src/viewer/text/textarea.c
+++ b/src/viewer/text/textarea.c
@@ -292,22 +292,39 @@ static unsigned char *
 save_textarea_file(unsigned char *value)
 {
        unsigned char *filename;
-       FILE *file = NULL;
-       int h;
+       FILE *fp;
+       int fd;
+       size_t len, nmemb;
 
        filename = get_tempdir_filename("elinks-area-XXXXXX");
        if (!filename) return NULL;
 
-       h = safe_mkstemp(filename);
-       if (h >= 0) file = fdopen(h, "w");
+       fd = safe_mkstemp(filename);
+       if (fd < 0) {
+               mem_free(filename);
+               return NULL;
+       }
 
-       if (file) {
-               fwrite(value, strlen(value), 1, file);
-               fclose(file);
-       } else {
+       len = strlen(value);
+       if (len == 0) return filename;
+
+       fp = fdopen(fd, "w");
+       if (!fp) {
+error:         unlink(filename);
                mem_free(filename);
+               close(fd);
+               return NULL;
+       }
+
+       nmemb = fwrite(value, len, 1, fp);
+       if (nmemb != 1) {
+               fclose(fp);
+               goto error;
        }
 
+       if (fclose(fp) != 0)
+               goto error;
+
        return filename;
 }
 
-- 
1.5.0.1.GIT

_______________________________________________
elinks-dev mailing list
[email protected]
http://linuxfromscratch.org/mailman/listinfo/elinks-dev

Reply via email to