Browse Source

socl/src: special case for string informations

Nathalie Furmento 13 years ago
parent
commit
24addd0cad
3 changed files with 27 additions and 14 deletions
  1. 6 6
      socl/src/cl_getdeviceinfo.c
  2. 9 8
      socl/src/cl_getplatforminfo.c
  3. 12 0
      socl/src/getinfo.h

+ 6 - 6
socl/src/cl_getdeviceinfo.c

@@ -79,12 +79,12 @@ soclGetDeviceInfo(cl_device_id    device,
          cl_platform_id p = &socl_platform;
          INFO_CASE_EX2(p);
       }
-      INFO_CASE(CL_DEVICE_NAME, device->name)
-      INFO_CASE(CL_DEVICE_VENDOR, SOCL_VENDOR)
-      INFO_CASE(CL_DRIVER_VERSION, SOCL_DRIVER_VERSION)
-      INFO_CASE(CL_DEVICE_PROFILE, SOCL_PROFILE)
-      INFO_CASE(CL_DEVICE_VERSION, SOCL_VERSION)
-      INFO_CASE(CL_DEVICE_EXTENSIONS, device->extensions)
+      INFO_CASE_STRING(CL_DEVICE_NAME, device->name)
+      INFO_CASE_STRING(CL_DEVICE_VENDOR, SOCL_VENDOR)
+      INFO_CASE_STRING(CL_DRIVER_VERSION, SOCL_DRIVER_VERSION)
+      INFO_CASE_STRING(CL_DEVICE_PROFILE, SOCL_PROFILE)
+      INFO_CASE_STRING(CL_DEVICE_VERSION, SOCL_VERSION)
+      INFO_CASE_STRING(CL_DEVICE_EXTENSIONS, device->extensions)
       default:
          return CL_INVALID_VALUE;
    }

+ 9 - 8
socl/src/cl_getplatforminfo.c

@@ -30,15 +30,16 @@ soclGetPlatformInfo(cl_platform_id   platform,
                   size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
 {
    if (platform != NULL && platform != &socl_platform)
-      return CL_INVALID_PLATFORM;
+	return CL_INVALID_PLATFORM;
 
-   switch (param_name) {
-      INFO_CASE(CL_PLATFORM_PROFILE, SOCL_PROFILE)
-      INFO_CASE(CL_PLATFORM_VERSION, SOCL_VERSION)
-      INFO_CASE(CL_PLATFORM_NAME,    SOCL_PLATFORM_NAME)
-      INFO_CASE(CL_PLATFORM_VENDOR,  SOCL_VENDOR)
-      INFO_CASE(CL_PLATFORM_EXTENSIONS, SOCL_PLATFORM_EXTENSIONS)
-      default:
+   switch (param_name)
+   {
+	INFO_CASE_STRING(CL_PLATFORM_PROFILE, SOCL_PROFILE);
+	INFO_CASE_STRING(CL_PLATFORM_VERSION, SOCL_VERSION);
+	INFO_CASE_STRING(CL_PLATFORM_NAME,    SOCL_PLATFORM_NAME);
+	INFO_CASE_STRING(CL_PLATFORM_VENDOR,  SOCL_VENDOR);
+	INFO_CASE_STRING(CL_PLATFORM_EXTENSIONS, SOCL_PLATFORM_EXTENSIONS);
+   default:
          return CL_INVALID_VALUE;
    }
 

+ 12 - 0
socl/src/getinfo.h

@@ -29,6 +29,18 @@
 #define INFO_CASE(param, var) case param: \
    INFO_CASE_EX2(var)
 
+#define INFO_CASE_STRING_EX2(var) if (param_value != NULL) { \
+      if (param_value_size < strlen(var)) \
+         return CL_INVALID_VALUE; \
+      strcpy(param_value, var); \
+   } \
+   if (param_value_size_ret != NULL) \
+      *param_value_size_ret = strlen(var); \
+   break;
+
+#define INFO_CASE_STRING(param, var) case param: \
+   INFO_CASE_STRING_EX2(var)
+
 #define INFO_CASE_VALUE(param, type, value) case param: {\
       type tmp = (value);\
       INFO_CASE_EX2(tmp);\