]> sigrok.org Git - libserialport.git/commitdiff
Make RETURN_VALUE macro side effect safe.
authorMartin Ling <redacted>
Sat, 7 Dec 2013 16:26:48 +0000 (16:26 +0000)
committerMartin Ling <redacted>
Sat, 7 Dec 2013 16:29:18 +0000 (16:29 +0000)
serialport.c

index 45f9773bd56020dfbc9fba2453fbb0f3b3b0b73e..e42e757d771f48615a3de5b1477c860d3f45faec 100644 (file)
@@ -173,7 +173,11 @@ void (*sp_debug_handler)(const char *format, ...) = sp_default_debug_handler;
 #define RETURN_OK() RETURN_CODE(SP_OK);
 #define RETURN_ERROR(err, msg) do { DEBUG_ERROR(err, msg); return err; } while (0)
 #define RETURN_FAIL(msg) do { DEBUG_FAIL(msg); return SP_ERR_FAIL; } while (0)
-#define RETURN_VALUE(fmt, x) do { DEBUG("%s returning " fmt, __func__, x); return x; } while (0)
+#define RETURN_VALUE(fmt, x) do { \
+       typeof(x) _x = x; \
+       DEBUG("%s returning " fmt, __func__, _x); \
+       return _x; \
+} while (0)
 #define SET_ERROR(val, err, msg) do { DEBUG_ERROR(err, msg); val = err; } while (0)
 #define SET_FAIL(val, msg) do { DEBUG_FAIL(msg); val = SP_ERR_FAIL; } while (0)
 #define TRACE(fmt, ...) DEBUG("%s(" fmt ") called", __func__, ##__VA_ARGS__)