Reformed the macros OSRF_METHOD_VERIFY_CONTEXT and _OSRF_METHOD_VERIFY_CONTEXT.
authorscottmk <scottmk@9efc2488-bf62-4759-914b-345cdb29e865>
Mon, 12 Jan 2009 20:17:39 +0000 (20:17 +0000)
committerscottmk <scottmk@9efc2488-bf62-4759-914b-345cdb29e865>
Mon, 12 Jan 2009 20:17:39 +0000 (20:17 +0000)
1. Renamed _OSRF_METHOD_VERIFY_CONTEXT to OSRF_METHOD_VERIFY_CONTEXT_
and the variable __j to _j, to avoid using reserved identifiers.

2. Applied the do/while(0) trick to accommodate multiple statements.

3. Avoid evaluating the macro arguments more than once.

4. Rearranged the white space for readability.

This update is a Band-aid.  These macros should turn into a proper function.

git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@1618 9efc2488-bf62-4759-914b-345cdb29e865

include/opensrf/osrf_application.h

index 8b1e247..52fdccf 100644 (file)
@@ -29,28 +29,50 @@ extern "C" {
 
 /** 
   This macro verifies methods receive the correct parameters */
-#define _OSRF_METHOD_VERIFY_CONTEXT(d) \
-       if(!d) return -1; \
-       if(!d->session) { osrfLogError( OSRF_LOG_MARK,  "Session is NULL in app reqeust" ); return -1; }\
-       if(!d->method) { osrfLogError( OSRF_LOG_MARK,  "Method is NULL in app reqeust" ); return -1; }\
-       if(d->method->argc) {\
-               if(!d->params) { osrfLogError( OSRF_LOG_MARK,  "Params is NULL in app reqeust %s", d->method->name ); return -1; }\
-               if( d->params->type != JSON_ARRAY ) { \
-                       osrfLogError( OSRF_LOG_MARK,  "'params' is not a JSON array for method %s", d->method->name);\
-                       return -1; }\
-       }\
-       if( !d->method->name ) { osrfLogError( OSRF_LOG_MARK,  "Method name is NULL"); return -1; } 
-
-#ifdef OSRF_LOG_PARAMS 
-#define OSRF_METHOD_VERIFY_CONTEXT(d) \
-       _OSRF_METHOD_VERIFY_CONTEXT(d); \
-       char* __j = jsonObjectToJSON(d->params);\
-       if(__j) { \
-               osrfLogInfo( OSRF_LOG_MARK,  "CALL:     %s %s - %s", d->session->remote_service, d->method->name, __j);\
-               free(__j); \
-       } 
+#define OSRF_METHOD_VERIFY_CONTEXT_(x) \
+       do { \
+               osrfMethodContext* d = x; \
+               if(!d) return -1; \
+               if(!d->session) { \
+                       osrfLogError( OSRF_LOG_MARK, "Session is NULL in app reqeust" ); \
+                       return -1; \
+               } \
+               if(!d->method) { \
+                       osrfLogError( OSRF_LOG_MARK,  "Method is NULL in app reqeust" ); \
+                       return -1; \
+               }\
+               if(d->method->argc) { \
+                       if(!d->params) { \
+                               osrfLogError( OSRF_LOG_MARK, \
+                                       "Params is NULL in app reqeust %s", d->method->name ); \
+                               return -1; \
+                       } \
+                       if( d->params->type != JSON_ARRAY ) { \
+                               osrfLogError( OSRF_LOG_MARK, \
+                                       "'params' is not a JSON array for method %s", d->method->name);\
+                               return -1; }\
+               }\
+               if( !d->method->name ) { \
+                       osrfLogError( OSRF_LOG_MARK, "Method name is NULL"); \
+                       return -1; \
+               } \
+       } while(0)
+
+#ifdef OSRF_LOG_PARAMS
+#define OSRF_METHOD_VERIFY_CONTEXT(x) \
+       do { \
+               osrfMethodContext* d = x; \
+               OSRF_METHOD_VERIFY_CONTEXT_(d); \
+               char* _j = jsonObjectToJSON(d->params); \
+               if(_j) { \
+                       osrfLogInfo( OSRF_LOG_MARK, \
+                               "CALL:  %s %s - %s", d->session->remote_service, d->method->name, _j); \
+                       free(_j); \
+               } \
+       } \
+       while( 0 )
 #else
-#define OSRF_METHOD_VERIFY_CONTEXT(d) _OSRF_METHOD_VERIFY_CONTEXT(d); 
+#define OSRF_METHOD_VERIFY_CONTEXT(d) OSRF_METHOD_VERIFY_CONTEXT_(d);
 #endif