Chromium Code Reviews| Index: src/shared/srpc/invoke.c |
| =================================================================== |
| --- src/shared/srpc/invoke.c (revision 3867) |
| +++ src/shared/srpc/invoke.c (working copy) |
| @@ -146,46 +146,46 @@ |
| /* |
| * The first phase is the args[] vector construction. |
| */ |
| -#define SCALAR_ARG(arg, field, va, impl_type) \ |
| - (arg)->u.field = va_arg(va, impl_type) |
| -#define ARRAY_ARG(arg, field, array_name, va, impl_type) \ |
| - (arg)->u.field.count = va_arg(va, uint32_t); \ |
| - (arg)->u.field.array_name = va_arg(va, impl_type) |
| -#define BOOL_ARG(arg, field, va, impl_type) \ |
| +#define SCALAR_ARG(arg, field, va, impl_type) \ |
| + (arg)->field = va_arg(va, impl_type) |
| +#define ARRAY_ARG(arg, array_name, va, impl_type) \ |
| + (arg)->u.count = va_arg(va, uint32_t); \ |
| + (arg)->array_name = va_arg(va, impl_type) |
|
Cliff L. Biffle
2010/12/08 21:51:51
If you wanted, you could have array_name be e.g. "
|
| +#define BOOL_ARG(arg, field, va, impl_type) \ |
| (arg)->u.bval = (va_arg(va, impl_type) != 0) |
| /* |
| * The second phase is the rets[] vector construction before invocation. |
| */ |
| -#define SCALAR_RETINIT(arg, field, va, impl_type) \ |
| - (arg)->u.field = (impl_type) 0; \ |
| +#define SCALAR_RETINIT(arg, field, va, impl_type) \ |
| + (arg)->field = (impl_type) 0; \ |
| SKIP(va, impl_type *) |
| -#define ARRAY_RETINIT(arg, field, array_name, va, impl_type) \ |
| - (arg)->u.field.count = *va_arg(va, uint32_t*); \ |
| - (arg)->u.field.array_name = va_arg(va, impl_type) |
| -#define BOOL_RETINIT(arg, field, va, impl_type) \ |
| +#define ARRAY_RETINIT(arg, array_name, va, impl_type) \ |
| + (arg)->u.count = *va_arg(va, uint32_t*); \ |
| + (arg)->array_name = va_arg(va, impl_type) |
| +#define BOOL_RETINIT(arg, field, va, impl_type) \ |
| SKIP(va, impl_type *) |
| /* |
| * The third phase is skipping the args[] after invocation. |
| */ |
| -#define SCALAR_SKIP(arg, field, va, impl_type) \ |
| +#define SCALAR_SKIP(arg, field, va, impl_type) \ |
| SKIP(va, impl_type) |
| -#define ARRAY_SKIP(arg, field, array_name, va, impl_type) \ |
| - SKIP(va, uint32_t) \ |
| +#define ARRAY_SKIP(arg, array_name, va, impl_type) \ |
| + SKIP(va, uint32_t) \ |
| SKIP(va, impl_type) |
| -#define BOOL_SKIP(arg, field, va, impl_type) \ |
| +#define BOOL_SKIP(arg, field, va, impl_type) \ |
| SCALAR_SKIP(arg, field, va, impl_type) |
| /* |
| * The fourth phase is copying the rets[] into the va_args after invocation. |
| */ |
| -#define SCALAR_RET(arg, field, va, impl_type) \ |
| - *va_arg(va, impl_type *) = (arg)->u.field |
| -#define ARRAY_RET(arg, field, array_name, va, impl_type) \ |
| - ARRAY_SKIP(arg, field, array_name, va, impl_type) |
| -#define BOOL_RET(arg, field, va, impl_type) \ |
| - *va_arg(va, impl_type *) = ((arg)->u.field != 0) |
| +#define SCALAR_RET(arg, field, va, impl_type) \ |
| + *va_arg(va, impl_type *) = (arg)->field |
| +#define ARRAY_RET(arg, array_name, va, impl_type) \ |
| + ARRAY_SKIP(arg, array_name, va, impl_type) |
| +#define BOOL_RET(arg, field, va, impl_type) \ |
| + *va_arg(va, impl_type *) = ((arg)->field != 0) |
| /* |
| * All the phases consist of a loop around a switch enumerating types. |
| @@ -193,34 +193,34 @@ |
| #define ARGRET_SWITCH(phase, va, arg) \ |
| switch (*p) { \ |
| case NACL_SRPC_ARG_TYPE_BOOL: \ |
| - BOOL_##phase(arg, bval, va, int); \ |
| + BOOL_##phase(arg, u.bval, va, int); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_CHAR_ARRAY: \ |
| - ARRAY_##phase(arg, caval, carr, va, char*); \ |
| + ARRAY_##phase(arg, arrays.carr, va, char*); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_DOUBLE: \ |
| - SCALAR_##phase(arg, dval, va, double); \ |
| + SCALAR_##phase(arg, u.dval, va, double); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_DOUBLE_ARRAY: \ |
| - ARRAY_##phase(arg, daval, darr, va, double*); \ |
| + ARRAY_##phase(arg, arrays.darr, va, double*); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_HANDLE: \ |
| - SCALAR_##phase(arg, hval, va, NaClSrpcImcDescType); \ |
| + SCALAR_##phase(arg, u.hval, va, NaClSrpcImcDescType); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_INT: \ |
| - SCALAR_##phase(arg, ival, va, int32_t); \ |
| + SCALAR_##phase(arg, u.ival, va, int32_t); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_INT_ARRAY: \ |
| - ARRAY_##phase(arg, iaval, iarr, va, int32_t*); \ |
| + ARRAY_##phase(arg, arrays.iarr, va, int32_t*); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_LONG: \ |
| - SCALAR_##phase(arg, lval, va, int64_t); \ |
| + SCALAR_##phase(arg, u.lval, va, int64_t); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_LONG_ARRAY: \ |
| - ARRAY_##phase(arg, laval, larr, va, int64_t*); \ |
| + ARRAY_##phase(arg, arrays.larr, va, int64_t*); \ |
| break; \ |
| case NACL_SRPC_ARG_TYPE_STRING: \ |
| - SCALAR_##phase(arg, sval.str, va, char*); \ |
| + SCALAR_##phase(arg, arrays.str, va, char*); \ |
| break; \ |
| /* \ |
| * The two cases below are added to avoid warnings, \ |