use idiomatic safe form for FUNLOCK macro
authorRich Felker <dalias@aerifal.cx>
Sat, 24 Feb 2018 17:33:06 +0000 (12:33 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 24 Feb 2018 17:33:06 +0000 (12:33 -0500)
previously this macro used an odd if/else form instead of the more
idiomatic do/while(0), making it unsafe against omission of trailing
semicolon. the omission would make the following statement conditional
instead of producing an error.

src/internal/stdio_impl.h

index 7cdf729de8e7e8146e96bae75662ce4bac0c0cd0..1127a492d96373d2e5af278ec50a080b49945944 100644 (file)
@@ -9,7 +9,7 @@
 
 #define FFINALLOCK(f) ((f)->lock>=0 ? __lockfile((f)) : 0)
 #define FLOCK(f) int __need_unlock = ((f)->lock>=0 ? __lockfile((f)) : 0)
-#define FUNLOCK(f) if (__need_unlock) __unlockfile((f)); else
+#define FUNLOCK(f) do { if (__need_unlock) __unlockfile((f)); } while (0)
 
 #define F_PERM 1
 #define F_NORD 4