17#include "apr_arch_threadproc.h"
18#include "apr_arch_file_io.h"
44#ifndef LOGON32_LOGON_NETWORK
45#define LOGON32_LOGON_NETWORK 3
49#ifndef DETACHED_PROCESS
50#define DETACHED_PROCESS 0
52#ifndef CREATE_UNICODE_ENVIRONMENT
53#define CREATE_UNICODE_ENVIRONMENT 0
55#ifndef STARTF_USESHOWWINDOW
56#define STARTF_USESHOWWINDOW 0
260 "function called twice"
273 "utf8 to ucs2 conversion failed"
287 "utf8 to ucs2 conversion failed"
359 const unsigned char *
s;
362 d = (
unsigned char *)
cmd;
363 s = (
const unsigned char *)
str;
371 if (*
s ==
'\r' || *
s ==
'\n') {
407#if APR_HAS_UNICODE_FS && !defined(_WIN32_WCE)
450 const char *
const *
args,
451 const char *
const *
env,
570#if defined(_WIN32_WCE)
666#if APR_HAS_UNICODE_FS
683 "utf8 to ucs2 conversion failed"
684 " on this string: ",
env[
i],
NULL));
688 pNext =
wcschr(pNext, L
'\0') + 1;
706 pNext =
strchr(pNext,
'\0') + 1;
718#if APR_HAS_UNICODE_FS
738 "utf8 to ucs2 conversion failed"
754 "utf8 to ucs2 conversion failed"
772 "utf8 to ucs2 conversion failed"
850 si.lpDesktop = L
"Winsta0\\Default";
962 new->hproc =
pi.hProcess;
963 new->pid =
pi.dwProcessId;
983 if (((
exit & 0xC0000000) == 0xC0000000)
984 && !(
exit & 0x3FFF0000))
998#if APR_HAS_UNICODE_FS
1030 if (
pe32.th32ParentProcessID ==
dwId) {
const char apr_size_t len
#define WaitForMultipleObjects(d1, ah, b, d2)
#define CreateProcessA(s1, s2, sd1, sd2, b, d1, s3, s4, pd2, hr)
#define CreateProcessW(s1, s2, sd1, sd2, b, d1, s3, s4, pd2, hr)
#define WaitForSingleObject(h, d)
APR Miscellaneous library routines.
APR general purpose library routines.
APR Portability Routines.
apr_size_t const unsigned char unsigned int unsigned int d
APR Thread and Process Library.
static apr_file_t no_file
#define APR_CHILD_NOTDONE
const void apr_status_t(*) apr_status_t(* APR_DECLARE)(void) apr_pool_pre_cleanup_register(apr_pool_t *p
const char int apr_pool_t * pool
#define apr_get_os_error()
apr_int32_t apr_fileperms_t
const char apr_fileperms_t perms
#define APR_FILEPATH_NATIVE
int strcasecmp(const char *a, const char *b)
char const *const char const *const ** env
apr_status_t() apr_perms_setfn_t(void *object, apr_fileperms_t perms, apr_uid_t uid, apr_gid_t gid)
#define apr_pcalloc(p, size)
const char const char * password
apr_int32_t apr_int32_t apr_int32_t err
apr_file_t apr_file_t * parent_out
apr_perms_setfn_t * perms_set_fn
const char const char *const const char *const apr_procattr_t * attr
void() apr_child_errfn_t(apr_pool_t *proc, apr_status_t err, const char *description)
apr_child_errfn_t * errfn
int apr_exit_why_e * exitwhy
apr_file_t apr_file_t * parent_in
const char const char *const * args
int apr_exit_why_e apr_wait_how_e waithow
apr_file_t apr_file_t * parent_err
apr_status_t apr_proc_detach(int daemonize)
apr_child_errfn_t * errfn
#define ELSE_WIN_OS_IS_ANSI
typedef HANDLE(WINAPI *apr_winapi_fpt_CreateToolhelp32Snapshot)(DWORD dwFlags
APR_DECLARE_DATA apr_oslevel_e apr_os_level
#define CreateToolhelp32Snapshot
#define IF_WIN_OS_IS_UNICODE
typedef DWORD(WINAPI *apr_winapi_fpt_GetCompressedFileSizeA)(IN LPCSTR lpFileName
static const char * has_space(const char *str)
static char * apr_caret_escape_args(apr_pool_t *p, const char *str)
#define LOGON32_LOGON_NETWORK
static apr_status_t attr_cleanup(void *theattr)
static apr_exit_why_e why_from_exit_code(DWORD exit)
apr_status_t apr_threadproc_init(apr_pool_t *pool)