LIB_PRIVATE void initialize_libc_wrappers() { const char *warn_msg = "WARNING: dmtcp_wrappers_initializing is set to '0' in the call to\n" " initialize_wrappers(). This may not be a good sign. \n" " Please inform dmtcp-developers if you see this message.\n\n"; if (dmtcp_wrappers_initializing == 0) { _real_write(STDERR_FILENO, warn_msg, strlen(warn_msg)); sleep(1); abort(); } if (!_libc_wrappers_initialized) { FOREACH_DMTCP_WRAPPER(GET_FUNC_ADDR); #ifdef __i386__ /* On i386 systems, there are two pthread_create symbols. We want the one * with GLIBC_2.1 version. On 64-bit machines, there is only one * pthread_create symbol (GLIBC_2.2.5), so no worries there. */ _real_func_addr[ENUM(pthread_create)] = dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.1"); #endif /* On some arm machines, the newest pthread_create has version GLIBC_2.4 */ void *addr = dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.4"); if (addr != NULL) { _real_func_addr[ENUM(pthread_create)] = addr; } _libc_wrappers_initialized = 1; } }
const char * glsl_interp_qualifier_name(enum glsl_interp_qualifier qual) { static const char *names[] = { ENUM(INTERP_QUALIFIER_NONE), ENUM(INTERP_QUALIFIER_SMOOTH), ENUM(INTERP_QUALIFIER_FLAT), ENUM(INTERP_QUALIFIER_NOPERSPECTIVE), }; STATIC_ASSERT(ARRAY_SIZE(names) == INTERP_QUALIFIER_COUNT); return NAME(qual); }
const char * glsl_interp_mode_name(enum glsl_interp_mode qual) { static const char *names[] = { ENUM(INTERP_MODE_NONE), ENUM(INTERP_MODE_SMOOTH), ENUM(INTERP_MODE_FLAT), ENUM(INTERP_MODE_NOPERSPECTIVE), }; STATIC_ASSERT(ARRAY_SIZE(names) == INTERP_MODE_COUNT); return NAME(qual); }
static int WindowHint(lua_State *L) { int target = checktarget(L, 1); switch(target) { case GLFW_RESIZABLE: case GLFW_VISIBLE: case GLFW_DECORATED: case GLFW_FOCUSED: case GLFW_AUTO_ICONIFY: case GLFW_FLOATING: case GLFW_MAXIMIZED: case GLFW_CENTER_CURSOR: case GLFW_TRANSPARENT_FRAMEBUFFER: case GLFW_HOVERED: case GLFW_FOCUS_ON_SHOW: case GLFW_SCALE_TO_MONITOR: return Boolean(L, target); case GLFW_RED_BITS: case GLFW_GREEN_BITS: case GLFW_BLUE_BITS: case GLFW_ALPHA_BITS: case GLFW_DEPTH_BITS: case GLFW_STENCIL_BITS: case GLFW_ACCUM_RED_BITS: case GLFW_ACCUM_GREEN_BITS: case GLFW_ACCUM_BLUE_BITS: case GLFW_ACCUM_ALPHA_BITS: case GLFW_AUX_BUFFERS: case GLFW_SAMPLES: case GLFW_REFRESH_RATE: return Integer(L, target); case GLFW_STEREO: case GLFW_SRGB_CAPABLE: case GLFW_DOUBLEBUFFER: return Boolean(L, target); case GLFW_CLIENT_API: ENUM(L, target, checkapi); case GLFW_CONTEXT_CREATION_API: ENUM(L, target, checkcontextcreationapi); case GLFW_CONTEXT_VERSION_MAJOR: case GLFW_CONTEXT_VERSION_MINOR: return Integer(L, target); case GLFW_CONTEXT_ROBUSTNESS: ENUM(L, target, checkrobustness); case GLFW_CONTEXT_RELEASE_BEHAVIOR: ENUM(L, target, checkreleasebehavior); case GLFW_OPENGL_FORWARD_COMPAT: case GLFW_OPENGL_DEBUG_CONTEXT: return Boolean(L, target); case GLFW_OPENGL_PROFILE: ENUM(L, target, checkprofile); case GLFW_X11_CLASS_NAME: case GLFW_X11_INSTANCE_NAME: return String(L, target); default: return luaL_error(L, "invalid target '%s'", lua_tostring(L, 1)); } return 0; }
static void initialize_libc_wrappers() { FOREACH_DMTCP_WRAPPER(GET_FUNC_ADDR); #ifdef __i386__ /* On i386 systems, there are two pthread_create symbols. We want the one * with GLIBC_2.1 version. On 64-bit machines, there is only one * pthread_create symbol (GLIBC_2.2.5), so no worries there. */ _real_func_addr[ENUM(pthread_create)] = dmtcp_dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.1"); #endif /* On some arm machines, the newest pthread_create has version GLIBC_2.4 */ void *addr = dmtcp_dlvsym(RTLD_NEXT, "pthread_create", "GLIBC_2.4"); if (addr != NULL) { _real_func_addr[ENUM(pthread_create)] = addr; } }
const char * gl_shader_stage_name(gl_shader_stage stage) { static const char *names[] = { ENUM(MESA_SHADER_VERTEX), ENUM(MESA_SHADER_TESS_CTRL), ENUM(MESA_SHADER_TESS_EVAL), ENUM(MESA_SHADER_GEOMETRY), ENUM(MESA_SHADER_FRAGMENT), ENUM(MESA_SHADER_COMPUTE), }; STATIC_ASSERT(ARRAY_SIZE(names) == MESA_SHADER_STAGES); return NAME(stage); }
long long id; const char *name; }; #define TABLE(what) static struct kdbus_enum_table kdbus_table_##what[] #define ENUM(_id) { .id=_id, .name=STRINGIFY(_id) } #define LOOKUP(what) \ const char *enum_##what(long long id) { \ for (size_t i = 0; i < ELEMENTSOF(kdbus_table_##what); i++) \ if (id == kdbus_table_##what[i].id) \ return kdbus_table_##what[i].name; \ return "UNKNOWN"; \ } TABLE(CMD) = { ENUM(KDBUS_CMD_BUS_MAKE), ENUM(KDBUS_CMD_NS_MAKE), ENUM(KDBUS_CMD_EP_MAKE), ENUM(KDBUS_CMD_HELLO), ENUM(KDBUS_CMD_MSG_SEND), ENUM(KDBUS_CMD_MSG_RECV), ENUM(KDBUS_CMD_NAME_LIST), ENUM(KDBUS_CMD_NAME_RELEASE), ENUM(KDBUS_CMD_CONN_INFO), ENUM(KDBUS_CMD_MATCH_ADD), ENUM(KDBUS_CMD_MATCH_REMOVE), ENUM(KDBUS_CMD_MONITOR), ENUM(KDBUS_CMD_EP_POLICY_SET), }; LOOKUP(CMD);
const char * gl_varying_slot_name(gl_varying_slot slot) { static const char *names[] = { ENUM(VARYING_SLOT_POS), ENUM(VARYING_SLOT_COL0), ENUM(VARYING_SLOT_COL1), ENUM(VARYING_SLOT_FOGC), ENUM(VARYING_SLOT_TEX0), ENUM(VARYING_SLOT_TEX1), ENUM(VARYING_SLOT_TEX2), ENUM(VARYING_SLOT_TEX3), ENUM(VARYING_SLOT_TEX4), ENUM(VARYING_SLOT_TEX5), ENUM(VARYING_SLOT_TEX6), ENUM(VARYING_SLOT_TEX7), ENUM(VARYING_SLOT_PSIZ), ENUM(VARYING_SLOT_BFC0), ENUM(VARYING_SLOT_BFC1), ENUM(VARYING_SLOT_EDGE), ENUM(VARYING_SLOT_CLIP_VERTEX), ENUM(VARYING_SLOT_CLIP_DIST0), ENUM(VARYING_SLOT_CLIP_DIST1), ENUM(VARYING_SLOT_PRIMITIVE_ID), ENUM(VARYING_SLOT_LAYER), ENUM(VARYING_SLOT_VIEWPORT), ENUM(VARYING_SLOT_FACE), ENUM(VARYING_SLOT_PNTC), ENUM(VARYING_SLOT_TESS_LEVEL_OUTER), ENUM(VARYING_SLOT_TESS_LEVEL_INNER), ENUM(VARYING_SLOT_VAR0), ENUM(VARYING_SLOT_VAR1), ENUM(VARYING_SLOT_VAR2), ENUM(VARYING_SLOT_VAR3), ENUM(VARYING_SLOT_VAR4), ENUM(VARYING_SLOT_VAR5), ENUM(VARYING_SLOT_VAR6), ENUM(VARYING_SLOT_VAR7), ENUM(VARYING_SLOT_VAR8), ENUM(VARYING_SLOT_VAR9), ENUM(VARYING_SLOT_VAR10), ENUM(VARYING_SLOT_VAR11), ENUM(VARYING_SLOT_VAR12), ENUM(VARYING_SLOT_VAR13), ENUM(VARYING_SLOT_VAR14), ENUM(VARYING_SLOT_VAR15), ENUM(VARYING_SLOT_VAR16), ENUM(VARYING_SLOT_VAR17), ENUM(VARYING_SLOT_VAR18), ENUM(VARYING_SLOT_VAR19), ENUM(VARYING_SLOT_VAR20), ENUM(VARYING_SLOT_VAR21), ENUM(VARYING_SLOT_VAR22), ENUM(VARYING_SLOT_VAR23), ENUM(VARYING_SLOT_VAR24), ENUM(VARYING_SLOT_VAR25), ENUM(VARYING_SLOT_VAR26), ENUM(VARYING_SLOT_VAR27), ENUM(VARYING_SLOT_VAR28), ENUM(VARYING_SLOT_VAR29), ENUM(VARYING_SLOT_VAR30), ENUM(VARYING_SLOT_VAR31), }; STATIC_ASSERT(ARRAY_SIZE(names) == VARYING_SLOT_MAX); return NAME(slot); }
const char * gl_vert_attrib_name(gl_vert_attrib attrib) { static const char *names[] = { ENUM(VERT_ATTRIB_POS), ENUM(VERT_ATTRIB_WEIGHT), ENUM(VERT_ATTRIB_NORMAL), ENUM(VERT_ATTRIB_COLOR0), ENUM(VERT_ATTRIB_COLOR1), ENUM(VERT_ATTRIB_FOG), ENUM(VERT_ATTRIB_COLOR_INDEX), ENUM(VERT_ATTRIB_EDGEFLAG), ENUM(VERT_ATTRIB_TEX0), ENUM(VERT_ATTRIB_TEX1), ENUM(VERT_ATTRIB_TEX2), ENUM(VERT_ATTRIB_TEX3), ENUM(VERT_ATTRIB_TEX4), ENUM(VERT_ATTRIB_TEX5), ENUM(VERT_ATTRIB_TEX6), ENUM(VERT_ATTRIB_TEX7), ENUM(VERT_ATTRIB_POINT_SIZE), ENUM(VERT_ATTRIB_GENERIC0), ENUM(VERT_ATTRIB_GENERIC1), ENUM(VERT_ATTRIB_GENERIC2), ENUM(VERT_ATTRIB_GENERIC3), ENUM(VERT_ATTRIB_GENERIC4), ENUM(VERT_ATTRIB_GENERIC5), ENUM(VERT_ATTRIB_GENERIC6), ENUM(VERT_ATTRIB_GENERIC7), ENUM(VERT_ATTRIB_GENERIC8), ENUM(VERT_ATTRIB_GENERIC9), ENUM(VERT_ATTRIB_GENERIC10), ENUM(VERT_ATTRIB_GENERIC11), ENUM(VERT_ATTRIB_GENERIC12), ENUM(VERT_ATTRIB_GENERIC13), ENUM(VERT_ATTRIB_GENERIC14), ENUM(VERT_ATTRIB_GENERIC15), }; STATIC_ASSERT(ARRAY_SIZE(names) == VERT_ATTRIB_MAX); return NAME(attrib); }
const char * gl_frag_result_name(gl_frag_result result) { static const char *names[] = { ENUM(FRAG_RESULT_DEPTH), ENUM(FRAG_RESULT_STENCIL), ENUM(FRAG_RESULT_COLOR), ENUM(FRAG_RESULT_SAMPLE_MASK), ENUM(FRAG_RESULT_DATA0), ENUM(FRAG_RESULT_DATA1), ENUM(FRAG_RESULT_DATA2), ENUM(FRAG_RESULT_DATA3), ENUM(FRAG_RESULT_DATA4), ENUM(FRAG_RESULT_DATA5), ENUM(FRAG_RESULT_DATA6), ENUM(FRAG_RESULT_DATA7), }; STATIC_ASSERT(ARRAY_SIZE(names) == FRAG_RESULT_MAX); return NAME(result); }
const char * gl_system_value_name(gl_system_value sysval) { static const char *names[] = { ENUM(SYSTEM_VALUE_VERTEX_ID), ENUM(SYSTEM_VALUE_INSTANCE_ID), ENUM(SYSTEM_VALUE_VERTEX_ID_ZERO_BASE), ENUM(SYSTEM_VALUE_BASE_VERTEX), ENUM(SYSTEM_VALUE_INVOCATION_ID), ENUM(SYSTEM_VALUE_FRONT_FACE), ENUM(SYSTEM_VALUE_SAMPLE_ID), ENUM(SYSTEM_VALUE_SAMPLE_POS), ENUM(SYSTEM_VALUE_SAMPLE_MASK_IN), ENUM(SYSTEM_VALUE_TESS_COORD), ENUM(SYSTEM_VALUE_VERTICES_IN), ENUM(SYSTEM_VALUE_PRIMITIVE_ID), ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER), ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER), ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_ID), ENUM(SYSTEM_VALUE_WORK_GROUP_ID), ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS), ENUM(SYSTEM_VALUE_VERTEX_CNT), }; STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX); return NAME(sysval); }
const char *name; }; #define TABLE(what) static struct kdbus_enum_table kdbus_table_##what[] #define ENUM(_id) { .id = _id, .name = STRINGIFY(_id) } #define LOOKUP(what) \ const char *enum_##what(long long id) \ { \ for (size_t i = 0; i < ELEMENTSOF(kdbus_table_##what); i++) \ if (id == kdbus_table_##what[i].id) \ return kdbus_table_##what[i].name; \ return "UNKNOWN"; \ } TABLE(CMD) = { ENUM(KDBUS_CMD_BUS_MAKE), ENUM(KDBUS_CMD_ENDPOINT_MAKE), ENUM(KDBUS_CMD_HELLO), ENUM(KDBUS_CMD_SEND), ENUM(KDBUS_CMD_RECV), ENUM(KDBUS_CMD_LIST), ENUM(KDBUS_CMD_NAME_RELEASE), ENUM(KDBUS_CMD_CONN_INFO), ENUM(KDBUS_CMD_MATCH_ADD), ENUM(KDBUS_CMD_MATCH_REMOVE), }; LOOKUP(CMD); TABLE(MSG) = { ENUM(_KDBUS_ITEM_NULL), ENUM(KDBUS_ITEM_PAYLOAD_VEC),
static void parse_setting (PinPointPoint *point, const char *setting) { /* C Preprocessor macros implemeting a mini language for interpreting * pinpoint key=value pairs */ #define START_PARSER if (0) { #define DEFAULT } else { #define END_PARSER } #define IF_PREFIX(prefix) } else if (g_str_has_prefix (setting, prefix)) { #define IF_EQUAL(string) } else if (g_str_equal (setting, string)) { #define STRING g_intern_string (strchr (setting, '=') + 1) #define INT atoi (strchr (setting, '=') + 1) #define FLOAT g_ascii_strtod (strchr (setting, '=') + 1, NULL) #define RESOLUTION(r) parse_resolution (&r, strchr (setting, '=') + 1) #define ENUM(r,t,s) \ do { \ int _i; \ EnumDescription *_d = t##_desc; \ r = _d[0].value; \ for (_i = 0; _d[_i].name; _i++) \ if (g_strcmp0 (_d[_i].name, s) == 0) \ r = _d[_i].value; \ } while (0) START_PARSER IF_PREFIX("stage-color=") point->stage_color = STRING; IF_PREFIX("font=") point->font = STRING; IF_PREFIX("text-color=") point->text_color = STRING; IF_PREFIX("text-align=") ENUM(point->text_align, PPTextAlign, STRING); IF_PREFIX("shading-color=") point->shading_color = STRING; IF_PREFIX("shading-opacity=") point->shading_opacity = FLOAT; IF_PREFIX("duration=") point->duration = FLOAT; IF_PREFIX("command=") point->command = STRING; IF_PREFIX("transition=") point->transition = STRING; IF_PREFIX("camera-framerate=") point->camera_framerate = INT; IF_PREFIX("camera-resolution=") RESOLUTION (point->camera_resolution); IF_EQUAL("fill") point->bg_scale = PP_BG_FILL; IF_EQUAL("fit") point->bg_scale = PP_BG_FIT; IF_EQUAL("stretch") point->bg_scale = PP_BG_STRETCH; IF_EQUAL("unscaled") point->bg_scale = PP_BG_UNSCALED; IF_EQUAL("center") point->position = CLUTTER_GRAVITY_CENTER; IF_EQUAL("top") point->position = CLUTTER_GRAVITY_NORTH; IF_EQUAL("bottom") point->position = CLUTTER_GRAVITY_SOUTH; IF_EQUAL("left") point->position = CLUTTER_GRAVITY_WEST; IF_EQUAL("right") point->position = CLUTTER_GRAVITY_EAST; IF_EQUAL("top-left") point->position = CLUTTER_GRAVITY_NORTH_WEST; IF_EQUAL("top-right") point->position = CLUTTER_GRAVITY_NORTH_EAST; IF_EQUAL("bottom-left") point->position = CLUTTER_GRAVITY_SOUTH_WEST; IF_EQUAL("bottom-right") point->position = CLUTTER_GRAVITY_SOUTH_EAST; IF_EQUAL("no-markup") point->use_markup = FALSE; IF_EQUAL("markup") point->use_markup = TRUE; DEFAULT point->bg = g_intern_string (setting); END_PARSER /* undefine the overrides, returning us to regular C */ #undef START_PARSER #undef END_PARSER #undef DEFAULT #undef IF_PREFIX #undef IF_EQUAL #undef FLOAT #undef STRING #undef INT #undef ENUM #undef RESOLUTION }
SP_CALL connection_error(sp_session *session, sp_error error) { TP1(Error, SESSION, Session::connection_error, ENUM(Error, error)); }
SP_CALL logged_in(sp_session *session, sp_error error) { TP1(Error, SESSION, Session::logged_in, ENUM(Error, error)); }