[Spice-devel] RFC: 'unused return value' errors on RHEL 6

Francois Gouget fgouget at codeweavers.com
Thu Dec 17 08:47:06 PST 2015


spice-bitmap-utils.c has a lot of calls to fwrite() that don't check the 
return value. On RHEL 6 these cause compilation errors due to -Werror:

spice-bitmap-utils.c:147: error: ignoring return value of 'fwrite', 
declared with attribute warn_unused_result

What should be done about that?
 * One option would be to remove -Werror but that would be really 
   heavy handed.

 * I have not found a way to disable just that one warning. But if 
   others have more luck that could be an option.

 * The best solution would be to not ignore the return values but that 
   means adding a lot of error-handling code. Does anyone want to take 
   this on?

 * Otherwise the usual way to trick the compiler is to rewrite the code 
   as
       (void)(func(...)+1)
   It's really ugly so it is generally further hidden in a macro. 
   This would yield a patch somewhat like this:


diff --git a/server/spice-bitmap-utils.c b/server/spice-bitmap-utils.c
index 8d6e7c6..3cc8b35 100644
--- a/server/spice-bitmap-utils.c
+++ b/server/spice-bitmap-utils.c
@@ -30,6 +30,8 @@
 #define GRADUAL_HIGH_RGB24_TH -0.03
 #define GRADUAL_HIGH_RGB16_TH 0
 
+#define IGNORE(x) ((void)(x+1))
+
 // setting a more permissive threshold for stream identification in order
 // not to miss streams that were artificially scaled on the guest (e.g., full screen view
 // in window media player 12). see red_stream_add_frame
@@ -141,7 +143,7 @@ static void dump_palette(FILE *f, SpicePalette* plt)
 {
     int i;
     for (i = 0; i < plt->num_ents; i++) {
-        fwrite(plt->ents + i, sizeof(uint32_t), 1, f);
+        IGNORE(fwrite(plt->ents + i, sizeof(uint32_t), 1, f));
     }
 }
 
@@ -150,11 +152,11 @@ static void dump_line(FILE *f, uint8_t* line, uint16_t n_pixel_bits, int width,
     int i;
     int copy_bytes_size = SPICE_ALIGN(n_pixel_bits * width, 8) / 8;
 
-    fwrite(line, 1, copy_bytes_size, f);
+    IGNORE(fwrite(line, 1, copy_bytes_size, f));
     if (row_size > copy_bytes_size) {
         // each line should be 4 bytes aligned
         for (i = copy_bytes_size; i < row_size; i++) {
-            fprintf(f, "%c", 0);
+            IGNORE(fprintf(f, "%c", 0));
         }
     }
 }
@@ -235,36 +237,36 @@ void dump_bitmap(SpiceBitmap *bitmap)
     }
 
     /* writing the bmp v3 header */
-    fprintf(f, "BM");
-    fwrite(&file_size, sizeof(file_size), 1, f);
+    IGNORE(fprintf(f, "BM"));
+    IGNORE(fwrite(&file_size, sizeof(file_size), 1, f));
     tmp_u16 = alpha ? 1 : 0;
-    fwrite(&tmp_u16, sizeof(tmp_u16), 1, f); // reserved for application
+    IGNORE(fwrite(&tmp_u16, sizeof(tmp_u16), 1, f)); // reserved for application
     tmp_u16 = 0;
-    fwrite(&tmp_u16, sizeof(tmp_u16), 1, f);
-    fwrite(&bitmap_data_offset, sizeof(bitmap_data_offset), 1, f);
+    IGNORE(fwrite(&tmp_u16, sizeof(tmp_u16), 1, f));
+    IGNORE(fwrite(&bitmap_data_offset, sizeof(bitmap_data_offset), 1, f));
     tmp_u32 = header_size - 14;
-    fwrite(&tmp_u32, sizeof(tmp_u32), 1, f); // sub header size
+    IGNORE(fwrite(&tmp_u32, sizeof(tmp_u32), 1, f)); // sub header size
     tmp_32 = bitmap->x;
-    fwrite(&tmp_32, sizeof(tmp_32), 1, f);
+    IGNORE(fwrite(&tmp_32, sizeof(tmp_32), 1, f));
     tmp_32 = bitmap->y;
-    fwrite(&tmp_32, sizeof(tmp_32), 1, f);
+    IGNORE(fwrite(&tmp_32, sizeof(tmp_32), 1, f));
 
     tmp_u16 = 1;
-    fwrite(&tmp_u16, sizeof(tmp_u16), 1, f); // color plane
-    fwrite(&n_pixel_bits, sizeof(n_pixel_bits), 1, f); // pixel depth
+    IGNORE(fwrite(&tmp_u16, sizeof(tmp_u16), 1, f)); // color plane
+    IGNORE(fwrite(&n_pixel_bits, sizeof(n_pixel_bits), 1, f)); // pixel depth
 
     tmp_u32 = 0;
-    fwrite(&tmp_u32, sizeof(tmp_u32), 1, f); // compression method
+    IGNORE(fwrite(&tmp_u32, sizeof(tmp_u32), 1, f)); // compression method
 
     tmp_u32 = 0; //file_size - bitmap_data_offset;
-    fwrite(&tmp_u32, sizeof(tmp_u32), 1, f); // image size
+    IGNORE(fwrite(&tmp_u32, sizeof(tmp_u32), 1, f)); // image size
     tmp_32 = 0;
-    fwrite(&tmp_32, sizeof(tmp_32), 1, f);
-    fwrite(&tmp_32, sizeof(tmp_32), 1, f);
+    IGNORE(fwrite(&tmp_32, sizeof(tmp_32), 1, f));
+    IGNORE(fwrite(&tmp_32, sizeof(tmp_32), 1, f));
     tmp_u32 = (!plt) ? 0 : plt->num_ents; // plt entries
-    fwrite(&tmp_u32, sizeof(tmp_u32), 1, f);
+    IGNORE(fwrite(&tmp_u32, sizeof(tmp_u32), 1, f));
     tmp_u32 = 0;
-    fwrite(&tmp_u32, sizeof(tmp_u32), 1, f);
+    IGNORE(fwrite(&tmp_u32, sizeof(tmp_u32), 1, f));
 
     if (plt) {
         dump_palette(f, plt);
-- 
2.6.4


More information about the Spice-devel mailing list