You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2002/07/01 19:48:47 UTC
cvs commit: httpd-2.0/os/win32 os.h util_win32.c
wrowe 2002/07/01 10:48:47
Modified: os/win32 os.h util_win32.c
Log:
Add ap_os_proc_filepath and clean up the win32/os.h file structure.
Revision Changes Path
1.52 +18 -14 httpd-2.0/os/win32/os.h
Index: os.h
===================================================================
RCS file: /home/cvs/httpd-2.0/os/win32/os.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- os.h 23 Jun 2002 10:24:07 -0000 1.51
+++ os.h 1 Jul 2002 17:48:47 -0000 1.52
@@ -56,22 +56,15 @@
* University of Illinois, Urbana-Champaign.
*/
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-/*
- * Compile the server including all the Windows NT 4.0 header files by
- * default. We still want the server to run on Win95/98 so use
- * runtime checks before calling NT specific functions to verify we are
- * really running on an NT system.
- *
- * Delegate windows include to the apr.h header, if USER or GDI declarations
+#ifdef WIN32
+
+#ifndef AP_OS_H
+#define AP_OS_H
+/* Delegate windows include to the apr.h header, if USER or GDI declarations
* are required (for a window rather than console application), include
* windows.h prior to any other Apache header files.
*/
-
-#ifndef ap_os_h
-#define ap_os_h
-#endif
+#include "apr_pools.h"
#include <io.h>
#include <fcntl.h>
@@ -87,6 +80,10 @@
#include <stddef.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* BIG RED WARNING: exit() is mapped to allow us to capture the exit
* status. This header must only be included from modules linked into
* the ApacheCore.dll - since it's a horrible behavior to exit() from
@@ -100,4 +97,11 @@
#define exit(status) ((exit)((real_exit_code==2) ? (real_exit_code = (status)) \
: ((real_exit_code = 0), (status))))
-#endif /* ! ap_os_h */
+AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef AP_OS_H */
+#endif /* def WIN32 */
1.27 +41 -0 httpd-2.0/os/win32/util_win32.c
Index: util_win32.c
===================================================================
RCS file: /home/cvs/httpd-2.0/os/win32/util_win32.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- util_win32.c 13 Mar 2002 20:47:59 -0000 1.26
+++ util_win32.c 1 Jul 2002 17:48:47 -0000 1.27
@@ -59,10 +59,51 @@
#include "httpd.h"
#include "http_log.h"
#include "apr_strings.h"
+#include "arch/win32/fileio.h"
+#include "arch/win32/misc.h"
#include <stdarg.h>
#include <time.h>
#include <stdlib.h>
+
+
+AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p)
+{
+ apr_wchar_t wbinpath[APR_PATH_MAX];
+
+#if APR_HAS_UNICODE_FS
+ IF_WIN_OS_IS_UNICODE
+ {
+ apr_size_t binlen;
+ apr_size_t wbinlen;
+ apr_status_t rv;
+ if (!GetModuleFileNameW(NULL, wbinpath, sizeof(wbinpath)
+ / sizeof(apr_wchar_t))) {
+ return apr_get_os_error();
+ }
+ wbinlen = wcslen(wbinpath) + 1;
+ binlen = (wbinlen - 1) * 3 + 1;
+ *binpath = apr_palloc(p, binlen);
+ rv = apr_conv_ucs2_to_utf8(wbinpath, &wbinlen, *binpath, &binlen);
+ if (rv != APR_SUCCESS)
+ return rv;
+ else if (wbinlen)
+ return APR_ENAMETOOLONG;
+ }
+#endif /* APR_HAS_UNICODE_FS */
+#if APR_HAS_ANSI_FS
+ ELSE_WIN_OS_IS_ANSI
+ {
+ /* share the same scratch buffer */
+ char *pathbuf = (char*) wbinpath;
+ if (!GetModuleFileName(NULL, pathbuf, sizeof(wbinpath))) {
+ return apr_get_os_error();
+ }
+ *binpath = apr_pstrdup(p, pathbuf);
+ }
+#endif
+ return APR_SUCCESS;
+}
AP_DECLARE(apr_status_t) ap_os_create_privileged_process(