X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=io.cpp;h=0ab92c350b41df2b9ba1e0630b6e275f3be9de9c;hb=c1bc67d13894b1b9456fb85abdabc4dbb5d71bcc;hp=d692a4d1f4990e1379180bd2d1ebba3874dad662;hpb=e1550b15c5975d9554a175033a35d89645be2b76;p=nssm.git diff --git a/io.cpp b/io.cpp index d692a4d..0ab92c3 100644 --- a/io.cpp +++ b/io.cpp @@ -5,7 +5,7 @@ int get_createfile_parameters(HKEY key, char *prefix, char *path, unsigned long char value[NSSM_STDIO_LENGTH]; /* Path. */ - if (_snprintf(value, sizeof(value), "%s", prefix) < 0) { + if (_snprintf_s(value, sizeof(value), _TRUNCATE, "%s", prefix) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, prefix, "get_createfile_parameters()", 0); return 1; } @@ -15,7 +15,7 @@ int get_createfile_parameters(HKEY key, char *prefix, char *path, unsigned long } /* ShareMode. */ - if (_snprintf(value, sizeof(value), "%s%s", prefix, NSSM_REG_STDIO_SHARING) < 0) { + if (_snprintf_s(value, sizeof(value), _TRUNCATE, "%s%s", prefix, NSSM_REG_STDIO_SHARING) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, NSSM_REG_STDIO_SHARING, "get_createfile_parameters()", 0); return 3; } @@ -26,7 +26,7 @@ int get_createfile_parameters(HKEY key, char *prefix, char *path, unsigned long } /* CreationDisposition. */ - if (_snprintf(value, sizeof(value), "%s%s", prefix, NSSM_REG_STDIO_DISPOSITION) < 0) { + if (_snprintf_s(value, sizeof(value), _TRUNCATE, "%s%s", prefix, NSSM_REG_STDIO_DISPOSITION) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, NSSM_REG_STDIO_DISPOSITION, "get_createfile_parameters()", 0); return 5; } @@ -37,7 +37,7 @@ int get_createfile_parameters(HKEY key, char *prefix, char *path, unsigned long } /* Flags. */ - if (_snprintf(value, sizeof(value), "%s%s", prefix, NSSM_REG_STDIO_FLAGS) < 0) { + if (_snprintf_s(value, sizeof(value), _TRUNCATE, "%s%s", prefix, NSSM_REG_STDIO_FLAGS) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, NSSM_REG_STDIO_FLAGS, "get_createfile_parameters()", 0); return 7; } @@ -50,6 +50,17 @@ int get_createfile_parameters(HKEY key, char *prefix, char *path, unsigned long return 0; } +int set_createfile_parameter(HKEY key, char *prefix, char *suffix, unsigned long number) { + char value[NSSM_STDIO_LENGTH]; + + if (_snprintf_s(value, sizeof(value), _TRUNCATE, "%s%s", prefix, suffix) < 0) { + log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, suffix, "set_createfile_parameter()", 0); + return 1; + } + + return set_number(key, value, number); +} + HANDLE append_to_file(char *path, unsigned long sharing, SECURITY_ATTRIBUTES *attributes, unsigned long disposition, unsigned long flags) { HANDLE ret; @@ -82,7 +93,7 @@ int get_output_handles(HKEY key, STARTUPINFO *si) { attributes.bInheritHandle = true; /* stdin */ - if (get_createfile_parameters(key, NSSM_REG_STDIN, path, &sharing, FILE_SHARE_WRITE, &disposition, OPEN_EXISTING, &flags, FILE_ATTRIBUTE_NORMAL)) return 1; + if (get_createfile_parameters(key, NSSM_REG_STDIN, path, &sharing, NSSM_STDIN_SHARING, &disposition, NSSM_STDIN_DISPOSITION, &flags, NSSM_STDIN_FLAGS)) return 1; if (path[0]) { si->hStdInput = CreateFile(path, FILE_READ_DATA, sharing, &attributes, disposition, flags, 0); if (! si->hStdInput) { @@ -93,10 +104,10 @@ int get_output_handles(HKEY key, STARTUPINFO *si) { } /* stdout */ - if (get_createfile_parameters(key, NSSM_REG_STDOUT, path, &sharing, FILE_SHARE_READ | FILE_SHARE_WRITE, &disposition, OPEN_ALWAYS, &flags, FILE_ATTRIBUTE_NORMAL)) return 3; + if (get_createfile_parameters(key, NSSM_REG_STDOUT, path, &sharing, NSSM_STDOUT_SHARING, &disposition, NSSM_STDOUT_DISPOSITION, &flags, NSSM_STDOUT_FLAGS)) return 3; if (path[0]) { /* Remember path for comparison with stderr. */ - if (_snprintf(stdout_path, sizeof(stdout_path), "%s", path) < 0) { + if (_snprintf_s(stdout_path, sizeof(stdout_path), _TRUNCATE, "%s", path) < 0) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, "stdout_path", "get_output_handles", 0); return 4; } @@ -108,7 +119,7 @@ int get_output_handles(HKEY key, STARTUPINFO *si) { else ZeroMemory(stdout_path, sizeof(stdout_path)); /* stderr */ - if (get_createfile_parameters(key, NSSM_REG_STDERR, path, &sharing, FILE_SHARE_READ | FILE_SHARE_WRITE, &disposition, OPEN_ALWAYS, &flags, FILE_ATTRIBUTE_NORMAL)) return 6; + if (get_createfile_parameters(key, NSSM_REG_STDERR, path, &sharing, NSSM_STDERR_SHARING, &disposition, NSSM_STDERR_DISPOSITION, &flags, NSSM_STDERR_FLAGS)) return 6; if (path[0]) { /* Same as stdin? */ if (str_equiv(path, stdout_path)) {