X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=registry.cpp;h=54a61141160cecb3db8cfd58c6032b55c3bb176d;hb=c479182f184204e0f330e68b2927ce7720f7e54f;hp=5172c50e91750fc26d66a5c201a785102281f8a4;hpb=b841998b630a15bb554da822b5f8ba3bbcb1b601;p=nssm.git diff --git a/registry.cpp b/registry.cpp index 5172c50..54a6114 100644 --- a/registry.cpp +++ b/registry.cpp @@ -181,6 +181,34 @@ int expand_parameter(HKEY key, char *value, char *data, unsigned long datalen, b return 0; } +/* + Query an unsigned long from the registry. + Returns: 1 if a number was retrieved. + 0 if none was found and must_exist is false. + -1 if none was found and must_exist is true. + -2 otherwise. +*/ +int get_number(HKEY key, char *value, unsigned long *number, bool must_exist) { + unsigned long type = REG_DWORD; + unsigned long number_len = sizeof(unsigned long); + + int ret = RegQueryValueEx(key, value, 0, &type, (unsigned char *) number, &number_len); + if (ret == ERROR_SUCCESS) return 1; + + if (ret == ERROR_FILE_NOT_FOUND) { + if (! must_exist) return 0; + } + + log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_QUERYVALUE_FAILED, value, error_string(GetLastError()), 0); + if (ret == ERROR_FILE_NOT_FOUND) return -1; + + return -2; +} + +int get_number(HKEY key, char *value, unsigned long *number) { + return get_number(key, value, number, true); +} + int get_parameters(char *service_name, char *exe, int exelen, char *flags, int flagslen, char *dir, int dirlen, char **env, unsigned long *throttle_delay) { unsigned long ret;