- if (!handle ||
- RegQueryValueEx((HKEY) handle, key, 0,
- &type, buffer, &size) != ERROR_SUCCESS ||
- type != REG_SZ) return NULL;
- else
- return buffer;
+ if (!handle)
+ return NULL;
+
+ /* Find out the type and size of the data. */
+ if (RegQueryValueEx((HKEY) handle, key, 0,
+ &type, NULL, &size) != ERROR_SUCCESS ||
+ type != REG_SZ)
+ return NULL;
+
+ allocsize = size+1; /* allow for an extra NUL if needed */
+ ret = snewn(allocsize, char);
+ if (RegQueryValueEx((HKEY) handle, key, 0,
+ &type, ret, &size) != ERROR_SUCCESS ||
+ type != REG_SZ) {
+ sfree(ret);
+ return NULL;
+ }
+ assert(size < allocsize);
+ ret[size] = '\0'; /* add an extra NUL in case RegQueryValueEx
+ * didn't supply one */
+
+ return ret;