From c0b7206652b2852bc574694e7ba07ba1c2acdc00 Mon Sep 17 00:00:00 2001 From: hongbotian Date: Mon, 30 Nov 2015 03:10:21 -0500 Subject: delete app Change-Id: Id4c572809969ebe89e946e88063eaed262cff3f2 Signed-off-by: hongbotian --- .../srclib/apr/threadproc/win32/proc.c | 874 --------------------- .../srclib/apr/threadproc/win32/signals.c | 62 -- .../srclib/apr/threadproc/win32/thread.c | 277 ------- .../srclib/apr/threadproc/win32/threadpriv.c | 101 --- 4 files changed, 1314 deletions(-) delete mode 100644 rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/proc.c delete mode 100644 rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/signals.c delete mode 100644 rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/thread.c delete mode 100644 rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/threadpriv.c (limited to 'rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32') diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/proc.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/proc.c deleted file mode 100644 index df1b6404..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/proc.c +++ /dev/null @@ -1,874 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "win32/apr_arch_threadproc.h" -#include "win32/apr_arch_file_io.h" - -#include "apr_thread_proc.h" -#include "apr_file_io.h" -#include "apr_general.h" -#include "apr_strings.h" -#include "apr_portable.h" -#include "apr_lib.h" -#include -#if APR_HAVE_SIGNAL_H -#include -#endif -#include -#if APR_HAVE_PROCESS_H -#include -#endif - -/* We have very carefully excluded volumes of definitions from the - * Microsoft Platform SDK, which kill the build time performance. - * These the sole constants we borrow from WinBase.h and WinUser.h - */ -#ifndef LOGON32_LOGON_NETWORK -#define LOGON32_LOGON_NETWORK 3 -#endif - -#ifdef _WIN32_WCE -#ifndef DETACHED_PROCESS -#define DETACHED_PROCESS 0 -#endif -#ifndef CREATE_UNICODE_ENVIRONMENT -#define CREATE_UNICODE_ENVIRONMENT 0 -#endif -#ifndef STARTF_USESHOWWINDOW -#define STARTF_USESHOWWINDOW 0 -#endif -#ifndef SW_HIDE -#define SW_HIDE 0 -#endif -#endif -/* - * some of the ideas expressed herein are based off of Microsoft - * Knowledge Base article: Q190351 - * - */ - -APR_DECLARE(apr_status_t) apr_procattr_create(apr_procattr_t **new, - apr_pool_t *pool) -{ - (*new) = (apr_procattr_t *)apr_pcalloc(pool, sizeof(apr_procattr_t)); - (*new)->pool = pool; - (*new)->cmdtype = APR_PROGRAM; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr, - apr_int32_t in, - apr_int32_t out, - apr_int32_t err) -{ - apr_status_t stat = APR_SUCCESS; - - if (in) { - /* APR_CHILD_BLOCK maps to APR_WRITE_BLOCK, while - * APR_PARENT_BLOCK maps to APR_READ_BLOCK, so we - * must transpose the CHILD/PARENT blocking flags - * only for the stdin pipe. stdout/stderr naturally - * map to the correct mode. - */ - if (in == APR_CHILD_BLOCK) - in = APR_READ_BLOCK; - else if (in == APR_PARENT_BLOCK) - in = APR_WRITE_BLOCK; - - stat = apr_create_nt_pipe(&attr->child_in, &attr->parent_in, - in, attr->pool); - if (stat == APR_SUCCESS) - stat = apr_file_inherit_unset(attr->parent_in); - } - if (out && stat == APR_SUCCESS) { - stat = apr_create_nt_pipe(&attr->parent_out, &attr->child_out, - out, attr->pool); - if (stat == APR_SUCCESS) - stat = apr_file_inherit_unset(attr->parent_out); - } - if (err && stat == APR_SUCCESS) { - stat = apr_create_nt_pipe(&attr->parent_err, &attr->child_err, - err, attr->pool); - if (stat == APR_SUCCESS) - stat = apr_file_inherit_unset(attr->parent_err); - } - return stat; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_in_set(apr_procattr_t *attr, - apr_file_t *child_in, - apr_file_t *parent_in) -{ - apr_status_t rv = APR_SUCCESS; - - if (child_in) { - if (attr->child_in == NULL) - rv = apr_file_dup(&attr->child_in, child_in, attr->pool); - else - rv = apr_file_dup2(attr->child_in, child_in, attr->pool); - - if (rv == APR_SUCCESS) - rv = apr_file_inherit_set(attr->child_in); - } - - if (parent_in && rv == APR_SUCCESS) { - if (attr->parent_in == NULL) - rv = apr_file_dup(&attr->parent_in, parent_in, attr->pool); - else - rv = apr_file_dup2(attr->parent_in, parent_in, attr->pool); - } - - return rv; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_out_set(apr_procattr_t *attr, - apr_file_t *child_out, - apr_file_t *parent_out) -{ - apr_status_t rv = APR_SUCCESS; - - if (child_out) { - if (attr->child_out == NULL) - rv = apr_file_dup(&attr->child_out, child_out, attr->pool); - else - rv = apr_file_dup2(attr->child_out, child_out, attr->pool); - - if (rv == APR_SUCCESS) - rv = apr_file_inherit_set(attr->child_out); - } - - if (parent_out && rv == APR_SUCCESS) { - if (attr->parent_out == NULL) - rv = apr_file_dup(&attr->parent_out, parent_out, attr->pool); - else - rv = apr_file_dup2(attr->parent_out, parent_out, attr->pool); - } - - return rv; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_err_set(apr_procattr_t *attr, - apr_file_t *child_err, - apr_file_t *parent_err) -{ - apr_status_t rv = APR_SUCCESS; - - if (child_err) { - if (attr->child_err == NULL) - rv = apr_file_dup(&attr->child_err, child_err, attr->pool); - else - rv = apr_file_dup2(attr->child_err, child_err, attr->pool); - - if (rv == APR_SUCCESS) - rv = apr_file_inherit_set(attr->child_err); - } - - if (parent_err && rv == APR_SUCCESS) { - if (attr->parent_err == NULL) - rv = apr_file_dup(&attr->parent_err, parent_err, attr->pool); - else - rv = apr_file_dup2(attr->parent_err, parent_err, attr->pool); - } - - return rv; -} - -APR_DECLARE(apr_status_t) apr_procattr_dir_set(apr_procattr_t *attr, - const char *dir) -{ - /* curr dir must be in native format, there are all sorts of bugs in - * the NT library loading code that flunk the '/' parsing test. - */ - return apr_filepath_merge(&attr->currdir, NULL, dir, - APR_FILEPATH_NATIVE, attr->pool); -} - -APR_DECLARE(apr_status_t) apr_procattr_cmdtype_set(apr_procattr_t *attr, - apr_cmdtype_e cmd) -{ - attr->cmdtype = cmd; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_detach_set(apr_procattr_t *attr, - apr_int32_t det) -{ - attr->detached = det; - return APR_SUCCESS; -} - -static const char* has_space(const char *str) -{ - const char *ch; - for (ch = str; *ch; ++ch) { - if (apr_isspace(*ch)) { - return ch; - } - } - return NULL; -} - -static char *apr_caret_escape_args(apr_pool_t *p, const char *str) -{ - char *cmd; - unsigned char *d; - const unsigned char *s; - - cmd = apr_palloc(p, 2 * strlen(str) + 1); /* Be safe */ - d = (unsigned char *)cmd; - s = (const unsigned char *)str; - for (; *s; ++s) { - - /* - * Newlines to Win32/OS2 CreateProcess() are ill advised. - * Convert them to spaces since they are effectively white - * space to most applications - */ - if (*s == '\r' || *s == '\n') { - *d++ = ' '; - continue; - } - - if (IS_SHCHAR(*s)) { - *d++ = '^'; - } - *d++ = *s; - } - *d = '\0'; - - return cmd; -} - -APR_DECLARE(apr_status_t) apr_procattr_child_errfn_set(apr_procattr_t *attr, - apr_child_errfn_t *errfn) -{ - attr->errfn = errfn; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_error_check_set(apr_procattr_t *attr, - apr_int32_t chk) -{ - attr->errchk = chk; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_procattr_addrspace_set(apr_procattr_t *attr, - apr_int32_t addrspace) -{ - /* won't ever be used on this platform, so don't save the flag */ - return APR_SUCCESS; -} - -#if APR_HAS_UNICODE_FS && !defined(_WIN32_WCE) - -/* Used only for the NT code path, a critical section is the fastest - * implementation available. - */ -static CRITICAL_SECTION proc_lock; - -static apr_status_t threadproc_global_cleanup(void *ignored) -{ - DeleteCriticalSection(&proc_lock); - return APR_SUCCESS; -} - -/* Called from apr_initialize, we need a critical section to handle - * the pipe inheritance on win32. This will mutex any process create - * so as we change our inherited pipes, we prevent another process from - * also inheriting those alternate handles, and prevent the other process - * from failing to inherit our standard handles. - */ -apr_status_t apr_threadproc_init(apr_pool_t *pool) -{ - IF_WIN_OS_IS_UNICODE - { - InitializeCriticalSection(&proc_lock); - /* register the cleanup */ - apr_pool_cleanup_register(pool, &proc_lock, - threadproc_global_cleanup, - apr_pool_cleanup_null); - } - return APR_SUCCESS; -} - -#else /* !APR_HAS_UNICODE_FS || defined(_WIN32_WCE) */ - -apr_status_t apr_threadproc_init(apr_pool_t *pool) -{ - return APR_SUCCESS; -} - -#endif - -APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new, - const char *progname, - const char * const *args, - const char * const *env, - apr_procattr_t *attr, - apr_pool_t *pool) -{ - apr_status_t rv; - apr_size_t i; - const char *argv0; - char *cmdline; - char *pEnvBlock; - PROCESS_INFORMATION pi; - DWORD dwCreationFlags = 0; - - new->in = attr->parent_in; - new->out = attr->parent_out; - new->err = attr->parent_err; - - if (attr->detached) { - /* If we are creating ourselves detached, Then we should hide the - * window we are starting in. And we had better redfine our - * handles for STDIN, STDOUT, and STDERR. Do not set the - * detached attribute for Win9x. We have found that Win9x does - * not manage the stdio handles properly when running old 16 - * bit executables if the detached attribute is set. - */ - if (apr_os_level >= APR_WIN_NT) { - /* - * XXX DETACHED_PROCESS won't on Win9x at all; on NT/W2K - * 16 bit executables fail (MS KB: Q150956) - */ - dwCreationFlags |= DETACHED_PROCESS; - } - } - - /* progname must be unquoted, in native format, as there are all sorts - * of bugs in the NT library loader code that fault when parsing '/'. - * XXX progname must be NULL if this is a 16 bit app running in WOW - */ - if (progname[0] == '\"') { - progname = apr_pstrndup(pool, progname + 1, strlen(progname) - 2); - } - - if (attr->cmdtype == APR_PROGRAM || attr->cmdtype == APR_PROGRAM_ENV) { - char *fullpath = NULL; - if ((rv = apr_filepath_merge(&fullpath, attr->currdir, progname, - APR_FILEPATH_NATIVE, pool)) != APR_SUCCESS) { - if (attr->errfn) { - attr->errfn(pool, rv, - apr_pstrcat(pool, "filepath_merge failed.", - " currdir: ", attr->currdir, - " progname: ", progname,NULL)); - } - return rv; - } - progname = fullpath; - } - else { - /* Do not fail if the path isn't parseable for APR_PROGRAM_PATH - * or APR_SHELLCMD. We only invoke apr_filepath_merge (with no - * left hand side expression) in order to correct the path slash - * delimiters. But the filename doesn't need to be in the CWD, - * nor does it need to be a filename at all (it could be a - * built-in shell command.) - */ - char *fullpath = NULL; - if ((rv = apr_filepath_merge(&fullpath, "", progname, - APR_FILEPATH_NATIVE, pool)) == APR_SUCCESS) { - progname = fullpath; - } - } - - if (has_space(progname)) { - argv0 = apr_pstrcat(pool, "\"", progname, "\"", NULL); - } - else { - argv0 = progname; - } - - /* Handle the args, seperate from argv0 */ - cmdline = ""; - for (i = 1; args && args[i]; ++i) { - if (has_space(args[i]) || !args[i][0]) { - cmdline = apr_pstrcat(pool, cmdline, " \"", args[i], "\"", NULL); - } - else { - cmdline = apr_pstrcat(pool, cmdline, " ", args[i], NULL); - } - } - -#ifndef _WIN32_WCE - if (attr->cmdtype == APR_SHELLCMD || attr->cmdtype == APR_SHELLCMD_ENV) { - char *shellcmd = getenv("COMSPEC"); - if (!shellcmd) { - if (attr->errfn) { - attr->errfn(pool, APR_EINVAL, "COMSPEC envar is not set"); - } - return APR_EINVAL; - } - if (shellcmd[0] == '"') { - progname = apr_pstrndup(pool, shellcmd + 1, strlen(shellcmd) - 2); - } - else { - progname = shellcmd; - if (has_space(shellcmd)) { - shellcmd = apr_pstrcat(pool, "\"", shellcmd, "\"", NULL); - } - } - /* Command.com does not support a quoted command, while cmd.exe demands one. - */ - i = strlen(progname); - if (i >= 11 && strcasecmp(progname + i - 11, "command.com") == 0) { - cmdline = apr_pstrcat(pool, shellcmd, " /C ", argv0, cmdline, NULL); - } - else { - cmdline = apr_pstrcat(pool, shellcmd, " /C \"", argv0, cmdline, "\"", NULL); - } - } - else -#endif - { -#if defined(_WIN32_WCE) - { -#else - /* Win32 is _different_ than unix. While unix will find the given - * program since it's already chdir'ed, Win32 cannot since the parent - * attempts to open the program with it's own path. - * ###: This solution isn't much better - it may defeat path searching - * when the path search was desired. Open to further discussion. - */ - i = strlen(progname); - if (i >= 4 && (strcasecmp(progname + i - 4, ".bat") == 0 - || strcasecmp(progname + i - 4, ".cmd") == 0)) - { - char *shellcmd = getenv("COMSPEC"); - if (!shellcmd) { - if (attr->errfn) { - attr->errfn(pool, APR_EINVAL, "COMSPEC envar is not set"); - } - return APR_EINVAL; - } - if (shellcmd[0] == '"') { - progname = apr_pstrndup(pool, shellcmd + 1, strlen(shellcmd) - 2); - } - else { - progname = shellcmd; - if (has_space(shellcmd)) { - shellcmd = apr_pstrcat(pool, "\"", shellcmd, "\"", NULL); - } - } - i = strlen(progname); - if (i >= 11 && strcasecmp(progname + i - 11, "command.com") == 0) { - /* XXX: Still insecure - need doubled-quotes on each individual - * arg of cmdline. Suspect we need to postpone cmdline parsing - * until this moment in all four code paths, with some flags - * to toggle 'which flavor' is needed. - */ - cmdline = apr_pstrcat(pool, shellcmd, " /C ", argv0, cmdline, NULL); - } - else { - /* We must protect the cmdline args from any interpolation - this - * is not a shellcmd, and the source of argv[] is untrusted. - * Notice we escape ALL the cmdline args, including the quotes - * around the individual args themselves. No sense in allowing - * the shift-state to be toggled, and the application will - * not see the caret escapes. - */ - cmdline = apr_caret_escape_args(pool, cmdline); - /* - * Our app name must always be quoted so the quotes surrounding - * the entire /c "command args" are unambigious. - */ - if (*argv0 != '"') { - cmdline = apr_pstrcat(pool, shellcmd, " /C \"\"", argv0, "\"", cmdline, "\"", NULL); - } - else { - cmdline = apr_pstrcat(pool, shellcmd, " /C \"", argv0, cmdline, "\"", NULL); - } - } - } - else { -#endif - /* A simple command we are directly invoking. Do not pass - * the first arg to CreateProc() for APR_PROGRAM_PATH - * invocation, since it would need to be a literal and - * complete file path. That is; "c:\bin\aprtest.exe" - * would succeed, but "c:\bin\aprtest" or "aprtest.exe" - * can fail. - */ - cmdline = apr_pstrcat(pool, argv0, cmdline, NULL); - - if (attr->cmdtype == APR_PROGRAM_PATH) { - progname = NULL; - } - } - } - - if (!env || attr->cmdtype == APR_PROGRAM_ENV || - attr->cmdtype == APR_SHELLCMD_ENV) { - pEnvBlock = NULL; - } - else { - apr_size_t iEnvBlockLen; - /* - * Win32's CreateProcess call requires that the environment - * be passed in an environment block, a null terminated block of - * null terminated strings. - */ - i = 0; - iEnvBlockLen = 1; - while (env[i]) { - iEnvBlockLen += strlen(env[i]) + 1; - i++; - } - if (!i) - ++iEnvBlockLen; - -#if APR_HAS_UNICODE_FS - IF_WIN_OS_IS_UNICODE - { - apr_wchar_t *pNext; - pEnvBlock = (char *)apr_palloc(pool, iEnvBlockLen * 2); - dwCreationFlags |= CREATE_UNICODE_ENVIRONMENT; - - i = 0; - pNext = (apr_wchar_t*)pEnvBlock; - while (env[i]) { - apr_size_t in = strlen(env[i]) + 1; - if ((rv = apr_conv_utf8_to_ucs2(env[i], &in, - pNext, &iEnvBlockLen)) - != APR_SUCCESS) { - if (attr->errfn) { - attr->errfn(pool, rv, - apr_pstrcat(pool, - "utf8 to ucs2 conversion failed" - " on this string: ", env[i], NULL)); - } - return rv; - } - pNext = wcschr(pNext, L'\0') + 1; - i++; - } - if (!i) - *(pNext++) = L'\0'; - *pNext = L'\0'; - } -#endif /* APR_HAS_UNICODE_FS */ -#if APR_HAS_ANSI_FS - ELSE_WIN_OS_IS_ANSI - { - char *pNext; - pEnvBlock = (char *)apr_palloc(pool, iEnvBlockLen); - - i = 0; - pNext = pEnvBlock; - while (env[i]) { - strcpy(pNext, env[i]); - pNext = strchr(pNext, '\0') + 1; - i++; - } - if (!i) - *(pNext++) = '\0'; - *pNext = '\0'; - } -#endif /* APR_HAS_ANSI_FS */ - } - - new->invoked = cmdline; - -#if APR_HAS_UNICODE_FS - IF_WIN_OS_IS_UNICODE - { - STARTUPINFOW si; - DWORD stdin_reset = 0; - DWORD stdout_reset = 0; - DWORD stderr_reset = 0; - apr_wchar_t *wprg = NULL; - apr_wchar_t *wcmd = NULL; - apr_wchar_t *wcwd = NULL; - - if (progname) { - apr_size_t nprg = strlen(progname) + 1; - apr_size_t nwprg = nprg + 6; - wprg = apr_palloc(pool, nwprg * sizeof(wprg[0])); - if ((rv = apr_conv_utf8_to_ucs2(progname, &nprg, wprg, &nwprg)) - != APR_SUCCESS) { - if (attr->errfn) { - attr->errfn(pool, rv, - apr_pstrcat(pool, - "utf8 to ucs2 conversion failed" - " on progname: ", progname, NULL)); - } - return rv; - } - } - - if (cmdline) { - apr_size_t ncmd = strlen(cmdline) + 1; - apr_size_t nwcmd = ncmd; - wcmd = apr_palloc(pool, nwcmd * sizeof(wcmd[0])); - if ((rv = apr_conv_utf8_to_ucs2(cmdline, &ncmd, wcmd, &nwcmd)) - != APR_SUCCESS) { - if (attr->errfn) { - attr->errfn(pool, rv, - apr_pstrcat(pool, - "utf8 to ucs2 conversion failed" - " on cmdline: ", cmdline, NULL)); - } - return rv; - } - } - - if (attr->currdir) - { - apr_size_t ncwd = strlen(attr->currdir) + 1; - apr_size_t nwcwd = ncwd; - wcwd = apr_palloc(pool, ncwd * sizeof(wcwd[0])); - if ((rv = apr_conv_utf8_to_ucs2(attr->currdir, &ncwd, - wcwd, &nwcwd)) - != APR_SUCCESS) { - if (attr->errfn) { - attr->errfn(pool, rv, - apr_pstrcat(pool, - "utf8 to ucs2 conversion failed" - " on currdir: ", attr->currdir, NULL)); - } - return rv; - } - } - - memset(&si, 0, sizeof(si)); - si.cb = sizeof(si); - - if (attr->detached) { - si.dwFlags |= STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; - } - -#ifndef _WIN32_WCE - /* LOCK CRITICAL SECTION - * before we begin to manipulate the inherited handles - */ - EnterCriticalSection(&proc_lock); - - if ((attr->child_in && attr->child_in->filehand) - || (attr->child_out && attr->child_out->filehand) - || (attr->child_err && attr->child_err->filehand)) - { - si.dwFlags |= STARTF_USESTDHANDLES; - - si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); - if (GetHandleInformation(si.hStdInput, &stdin_reset) - && (stdin_reset &= HANDLE_FLAG_INHERIT)) - SetHandleInformation(si.hStdInput, - HANDLE_FLAG_INHERIT, 0); - - if (attr->child_in && attr->child_in->filehand) - { - si.hStdInput = attr->child_in->filehand; - SetHandleInformation(si.hStdInput, HANDLE_FLAG_INHERIT, - HANDLE_FLAG_INHERIT); - } - else - si.hStdInput = INVALID_HANDLE_VALUE; - - si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); - if (GetHandleInformation(si.hStdOutput, &stdout_reset) - && (stdout_reset &= HANDLE_FLAG_INHERIT)) - SetHandleInformation(si.hStdOutput, - HANDLE_FLAG_INHERIT, 0); - - if (attr->child_out && attr->child_out->filehand) - { - si.hStdOutput = attr->child_out->filehand; - SetHandleInformation(si.hStdOutput, HANDLE_FLAG_INHERIT, - HANDLE_FLAG_INHERIT); - } - else - si.hStdOutput = INVALID_HANDLE_VALUE; - - si.hStdError = GetStdHandle(STD_ERROR_HANDLE); - if (GetHandleInformation(si.hStdError, &stderr_reset) - && (stderr_reset &= HANDLE_FLAG_INHERIT)) - SetHandleInformation(si.hStdError, - HANDLE_FLAG_INHERIT, 0); - - if (attr->child_err && attr->child_err->filehand) - { - si.hStdError = attr->child_err->filehand; - SetHandleInformation(si.hStdError, HANDLE_FLAG_INHERIT, - HANDLE_FLAG_INHERIT); - } - else - si.hStdError = INVALID_HANDLE_VALUE; - } - rv = CreateProcessW(wprg, wcmd, /* Executable & Command line */ - NULL, NULL, /* Proc & thread security attributes */ - TRUE, /* Inherit handles */ - dwCreationFlags, /* Creation flags */ - pEnvBlock, /* Environment block */ - wcwd, /* Current directory name */ - &si, &pi); - - if ((attr->child_in && attr->child_in->filehand) - || (attr->child_out && attr->child_out->filehand) - || (attr->child_err && attr->child_err->filehand)) - { - if (stdin_reset) - SetHandleInformation(GetStdHandle(STD_INPUT_HANDLE), - stdin_reset, stdin_reset); - - if (stdout_reset) - SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), - stdout_reset, stdout_reset); - - if (stderr_reset) - SetHandleInformation(GetStdHandle(STD_ERROR_HANDLE), - stderr_reset, stderr_reset); - } - /* RELEASE CRITICAL SECTION - * The state of the inherited handles has been restored. - */ - LeaveCriticalSection(&proc_lock); - -#else /* defined(_WIN32_WCE) */ - rv = CreateProcessW(wprg, wcmd, /* Executable & Command line */ - NULL, NULL, /* Proc & thread security attributes */ - FALSE, /* must be 0 */ - dwCreationFlags, /* Creation flags */ - NULL, /* Environment block must be NULL */ - NULL, /* Current directory name must be NULL*/ - NULL, /* STARTUPINFO not supported */ - &pi); -#endif - } -#endif /* APR_HAS_UNICODE_FS */ -#if APR_HAS_ANSI_FS - ELSE_WIN_OS_IS_ANSI - { - STARTUPINFOA si; - memset(&si, 0, sizeof(si)); - si.cb = sizeof(si); - - if (attr->detached) { - si.dwFlags |= STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; - } - - if ((attr->child_in && attr->child_in->filehand) - || (attr->child_out && attr->child_out->filehand) - || (attr->child_err && attr->child_err->filehand)) - { - si.dwFlags |= STARTF_USESTDHANDLES; - - si.hStdInput = (attr->child_in) - ? attr->child_in->filehand - : GetStdHandle(STD_INPUT_HANDLE); - - si.hStdOutput = (attr->child_out) - ? attr->child_out->filehand - : GetStdHandle(STD_OUTPUT_HANDLE); - - si.hStdError = (attr->child_err) - ? attr->child_err->filehand - : GetStdHandle(STD_ERROR_HANDLE); - } - - rv = CreateProcessA(progname, cmdline, /* Command line */ - NULL, NULL, /* Proc & thread security attributes */ - TRUE, /* Inherit handles */ - dwCreationFlags, /* Creation flags */ - pEnvBlock, /* Environment block */ - attr->currdir, /* Current directory name */ - &si, &pi); - } -#endif /* APR_HAS_ANSI_FS */ - - /* Check CreateProcess result - */ - if (!rv) - return apr_get_os_error(); - - /* XXX Orphaned handle warning - no fix due to broken apr_proc_t api. - */ - new->hproc = pi.hProcess; - new->pid = pi.dwProcessId; - - if (attr->child_in) { - apr_file_close(attr->child_in); - } - if (attr->child_out) { - apr_file_close(attr->child_out); - } - if (attr->child_err) { - apr_file_close(attr->child_err); - } - CloseHandle(pi.hThread); - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_proc_wait_all_procs(apr_proc_t *proc, - int *exitcode, - apr_exit_why_e *exitwhy, - apr_wait_how_e waithow, - apr_pool_t *p) -{ - /* Unix does apr_proc_wait(proc(-1), exitcode, exitwhy, waithow) - * but Win32's apr_proc_wait won't work that way. We can either - * register all APR created processes in some sort of AsyncWait - * thread, or simply walk from the global process pool for all - * apr_pool_note_subprocess()es registered with APR. - */ - return APR_ENOTIMPL; -} - -static apr_exit_why_e why_from_exit_code(DWORD exit) { - /* See WinNT.h STATUS_ACCESS_VIOLATION and family for how - * this class of failures was determined - */ - if (((exit & 0xC0000000) == 0xC0000000) - && !(exit & 0x3FFF0000)) - return APR_PROC_SIGNAL; - else - return APR_PROC_EXIT; - - /* ### No way to tell if Dr Watson grabbed a core, AFAICT. */ -} - -APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc, - int *exitcode, apr_exit_why_e *exitwhy, - apr_wait_how_e waithow) -{ - DWORD stat; - DWORD time; - - if (waithow == APR_WAIT) - time = INFINITE; - else - time = 0; - - if ((stat = WaitForSingleObject(proc->hproc, time)) == WAIT_OBJECT_0) { - if (GetExitCodeProcess(proc->hproc, &stat)) { - if (exitcode) - *exitcode = stat; - if (exitwhy) - *exitwhy = why_from_exit_code(stat); - CloseHandle(proc->hproc); - proc->hproc = NULL; - return APR_CHILD_DONE; - } - } - else if (stat == WAIT_TIMEOUT) { - return APR_CHILD_NOTDONE; - } - return apr_get_os_error(); -} diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/signals.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/signals.c deleted file mode 100644 index 24c9dd53..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/signals.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "win32/apr_arch_threadproc.h" -#include "win32/apr_arch_file_io.h" -#include "apr_thread_proc.h" -#include "apr_file_io.h" -#include "apr_general.h" -#if APR_HAVE_SIGNAL_H -#include -#endif -#include -#if APR_HAVE_SYS_WAIT -#include -#endif - -/* Windows only really support killing process, but that will do for now. - * - * ### Actually, closing the input handle to the proc should also do fine - * for most console apps. This definately needs improvement... - */ -APR_DECLARE(apr_status_t) apr_proc_kill(apr_proc_t *proc, int signal) -{ - if (proc->hproc != NULL) { - if (TerminateProcess(proc->hproc, signal) == 0) { - return apr_get_os_error(); - } - /* On unix, SIGKILL leaves a apr_proc_wait()able pid lying around, - * so we will leave hproc alone until the app calls apr_proc_wait(). - */ - return APR_SUCCESS; - } - return APR_EPROC_UNKNOWN; -} - -void apr_signal_init(apr_pool_t *pglobal) -{ -} - -const char *apr_signal_description_get(int signum) -{ - return "unknown signal (not supported)"; -} - -/* Deprecated */ -const char *apr_signal_get_description(int signum) -{ - return apr_signal_description_get(signum); -} diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/thread.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/thread.c deleted file mode 100644 index 64317d9b..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/thread.c +++ /dev/null @@ -1,277 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "apr_private.h" -#include "win32/apr_arch_threadproc.h" -#include "apr_thread_proc.h" -#include "apr_general.h" -#include "apr_lib.h" -#include "apr_portable.h" -#if APR_HAVE_PROCESS_H -#include -#endif -#include "apr_arch_misc.h" - -/* Chosen for us by apr_initialize */ -DWORD tls_apr_thread = 0; - -APR_DECLARE(apr_status_t) apr_threadattr_create(apr_threadattr_t **new, - apr_pool_t *pool) -{ - (*new) = (apr_threadattr_t *)apr_palloc(pool, - sizeof(apr_threadattr_t)); - - if ((*new) == NULL) { - return APR_ENOMEM; - } - - (*new)->pool = pool; - (*new)->detach = 0; - (*new)->stacksize = 0; - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadattr_detach_set(apr_threadattr_t *attr, - apr_int32_t on) -{ - attr->detach = on; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr) -{ - if (attr->detach == 1) - return APR_DETACH; - return APR_NOTDETACH; -} - -APR_DECLARE(apr_status_t) apr_threadattr_stacksize_set(apr_threadattr_t *attr, - apr_size_t stacksize) -{ - attr->stacksize = stacksize; - return APR_SUCCESS; -} - -static void *dummy_worker(void *opaque) -{ - apr_thread_t *thd = (apr_thread_t *)opaque; - TlsSetValue(tls_apr_thread, thd->td); - return thd->func(thd, thd->data); -} - -APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new, - apr_threadattr_t *attr, - apr_thread_start_t func, - void *data, apr_pool_t *pool) -{ - apr_status_t stat; - unsigned temp; - HANDLE handle; - - (*new) = (apr_thread_t *)apr_palloc(pool, sizeof(apr_thread_t)); - - if ((*new) == NULL) { - return APR_ENOMEM; - } - - (*new)->pool = pool; - (*new)->data = data; - (*new)->func = func; - (*new)->td = NULL; - - stat = apr_pool_create(&(*new)->pool, pool); - if (stat != APR_SUCCESS) { - return stat; - } - - /* Use 0 for Thread Stack Size, because that will default the stack to the - * same size as the calling thread. - */ -#ifndef _WIN32_WCE - if ((handle = (HANDLE)_beginthreadex(NULL, - attr && attr->stacksize > 0 ? attr->stacksize : 0, - (unsigned int (APR_THREAD_FUNC *)(void *))dummy_worker, - (*new), 0, &temp)) == 0) { - return APR_FROM_OS_ERROR(_doserrno); - } -#else - if ((handle = CreateThread(NULL, - attr && attr->stacksize > 0 ? attr->stacksize : 0, - (unsigned int (APR_THREAD_FUNC *)(void *))dummy_worker, - (*new), 0, &temp)) == 0) { - return apr_get_os_error(); - } -#endif - if (attr && attr->detach) { - CloseHandle(handle); - } - else - (*new)->td = handle; - - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_exit(apr_thread_t *thd, - apr_status_t retval) -{ - thd->exitval = retval; - apr_pool_destroy(thd->pool); - thd->pool = NULL; -#ifndef _WIN32_WCE - _endthreadex(0); -#else - ExitThread(0); -#endif - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, - apr_thread_t *thd) -{ - apr_status_t rv = APR_SUCCESS; - - if (!thd->td) { - /* Can not join on detached threads */ - return APR_DETACH; - } - rv = WaitForSingleObject(thd->td, INFINITE); - if ( rv == WAIT_OBJECT_0 || rv == WAIT_ABANDONED) { - /* If the thread_exit has been called */ - if (!thd->pool) - *retval = thd->exitval; - else - rv = APR_INCOMPLETE; - } - else - rv = apr_get_os_error(); - CloseHandle(thd->td); - thd->td = NULL; - - return rv; -} - -APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd) -{ - if (thd->td && CloseHandle(thd->td)) { - thd->td = NULL; - return APR_SUCCESS; - } - else { - return apr_get_os_error(); - } -} - -APR_DECLARE(void) apr_thread_yield() -{ - /* SwitchToThread is not supported on Win9x, but since it's - * primarily a noop (entering time consuming code, therefore - * providing more critical threads a bit larger timeslice) - * we won't worry too much if it's not available. - */ -#ifndef _WIN32_WCE - if (apr_os_level >= APR_WIN_NT) { - SwitchToThread(); - } -#endif -} - -APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key, - apr_thread_t *thread) -{ - return apr_pool_userdata_get(data, key, thread->pool); -} - -APR_DECLARE(apr_status_t) apr_thread_data_set(void *data, const char *key, - apr_status_t (*cleanup) (void *), - apr_thread_t *thread) -{ - return apr_pool_userdata_set(data, key, cleanup, thread->pool); -} - - -APR_DECLARE(apr_os_thread_t) apr_os_thread_current(void) -{ - HANDLE hthread = (HANDLE)TlsGetValue(tls_apr_thread); - HANDLE hproc; - - if (hthread) { - return hthread; - } - - hproc = GetCurrentProcess(); - hthread = GetCurrentThread(); - if (!DuplicateHandle(hproc, hthread, - hproc, &hthread, 0, FALSE, - DUPLICATE_SAME_ACCESS)) { - return NULL; - } - TlsSetValue(tls_apr_thread, hthread); - return hthread; -} - -APR_DECLARE(apr_status_t) apr_os_thread_get(apr_os_thread_t **thethd, - apr_thread_t *thd) -{ - if (thd == NULL) { - return APR_ENOTHREAD; - } - *thethd = thd->td; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_os_thread_put(apr_thread_t **thd, - apr_os_thread_t *thethd, - apr_pool_t *pool) -{ - if (pool == NULL) { - return APR_ENOPOOL; - } - if ((*thd) == NULL) { - (*thd) = (apr_thread_t *)apr_palloc(pool, sizeof(apr_thread_t)); - (*thd)->pool = pool; - } - (*thd)->td = thethd; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_once_init(apr_thread_once_t **control, - apr_pool_t *p) -{ - (*control) = apr_pcalloc(p, sizeof(**control)); - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_thread_once(apr_thread_once_t *control, - void (*func)(void)) -{ - if (!InterlockedExchange(&control->value, 1)) { - func(); - } - return APR_SUCCESS; -} - -APR_DECLARE(int) apr_os_thread_equal(apr_os_thread_t tid1, - apr_os_thread_t tid2) -{ - /* Since the only tid's we support our are own, and - * apr_os_thread_current returns the identical handle - * to the one we created initially, the test is simple. - */ - return (tid1 == tid2); -} - -APR_POOL_IMPLEMENT_ACCESSOR(thread) diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/threadpriv.c b/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/threadpriv.c deleted file mode 100644 index 9ddc24fb..00000000 --- a/rubbos/app/httpd-2.0.64/srclib/apr/threadproc/win32/threadpriv.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "win32/apr_arch_threadproc.h" -#include "apr_thread_proc.h" -#include "apr_general.h" -#include "apr_lib.h" -#include "apr_errno.h" -#include "apr_portable.h" - -APR_DECLARE(apr_status_t) apr_threadkey_private_create(apr_threadkey_t **key, - void (*dest)(void *), - apr_pool_t *pool) -{ - (*key) = (apr_threadkey_t *)apr_palloc(pool, sizeof(apr_threadkey_t)); - if ((*key) == NULL) { - return APR_ENOMEM; - } - - (*key)->pool = pool; - - if (((*key)->key = TlsAlloc()) != 0xFFFFFFFF) { - return APR_SUCCESS; - } - return apr_get_os_error(); -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_get(void **new, - apr_threadkey_t *key) -{ - if ((*new) = TlsGetValue(key->key)) { - return APR_SUCCESS; - } - return apr_get_os_error(); -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_set(void *priv, - apr_threadkey_t *key) -{ - if (TlsSetValue(key->key, priv)) { - return APR_SUCCESS; - } - return apr_get_os_error(); -} - -APR_DECLARE(apr_status_t) apr_threadkey_private_delete(apr_threadkey_t *key) -{ - if (TlsFree(key->key)) { - return APR_SUCCESS; - } - return apr_get_os_error(); -} - -APR_DECLARE(apr_status_t) apr_threadkey_data_get(void **data, const char *key, - apr_threadkey_t *threadkey) -{ - return apr_pool_userdata_get(data, key, threadkey->pool); -} - -APR_DECLARE(apr_status_t) apr_threadkey_data_set(void *data, const char *key, - apr_status_t (*cleanup)(void *), - apr_threadkey_t *threadkey) -{ - return apr_pool_userdata_set(data, key, cleanup, threadkey->pool); -} - -APR_DECLARE(apr_status_t) apr_os_threadkey_get(apr_os_threadkey_t *thekey, - apr_threadkey_t *key) -{ - *thekey = key->key; - return APR_SUCCESS; -} - -APR_DECLARE(apr_status_t) apr_os_threadkey_put(apr_threadkey_t **key, - apr_os_threadkey_t *thekey, - apr_pool_t *pool) -{ - if (pool == NULL) { - return APR_ENOPOOL; - } - if ((*key) == NULL) { - (*key) = (apr_threadkey_t *)apr_palloc(pool, sizeof(apr_threadkey_t)); - (*key)->pool = pool; - } - (*key)->key = *thekey; - return APR_SUCCESS; -} - -- cgit 1.2.3-korg