rbb 99/06/03 12:44:04
Modified: apr/include apr_win.h apr/lib lib.def apr/test testfile.c include apr_errno.h apr_file_io.h apr_general.h Added: apr/file_io/win32 dir.c file_io.def file_io.dsp fileacc.c filedup.c fileio.h filestat.c open.c pipe.c readdir.c readdir.h readwrite.c seek.c apr/test testfile.dsp Log: First pass at Windows File_io stuff. This should be enought to build and run the testfile program. I'll check this though, and commit anything else that is needed. Revision Changes Path 1.1 apache-apr/apr/file_io/win32/dir.c Index: dir.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #ifdef HAVE_ERRNO_H #include <errno.h> #endif #ifdef HAVE_STRING_H #include <string.h> #endif #ifdef HAVE_DIRENT_H #include <dirent.h> #endif #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> #endif #ifdef WIN32 #include "apr_win.h" #include <windows.h> #endif #include "fileio.h" #include "apr_file_io.h" #include "apr_lib.h" ap_status_t dir_cleanup(void *thedir) { struct dir_t *dir = thedir; if (CloseHandle(dir->dirhand) == 0) { return APR_SUCCESS; } else { return errno; } } ap_status_t ap_opendir(ap_context_t *cont, const char *dirname, struct dir_t **new) { char * temp; (*new) = ap_palloc(cont, sizeof(struct dir_t)); (*new)->cntxt = cont; (*new)->entry = NULL; temp = canonical_filename((*new)->cntxt, dirname); if (temp[strlen(temp)] == '/') { (*new)->dirname = ap_pstrcat(cont, dirname, "*", NULL); } else { (*new)->dirname = ap_pstrcat(cont, dirname, "/*", NULL); } (*new)->dirhand = INVALID_HANDLE_VALUE; ap_register_cleanup((*new)->cntxt, (void *)(*new), dir_cleanup, NULL); return APR_SUCCESS; } ap_status_t ap_closedir(struct dir_t *thedir) { if (FindClose(thedir->dirhand)) { ap_kill_cleanup(thedir->cntxt, thedir, dir_cleanup); return APR_SUCCESS; } return APR_EEXIST; } ap_status_t ap_readdir(struct dir_t *thedir) { if (thedir->dirhand == INVALID_HANDLE_VALUE) { thedir->entry = ap_palloc(thedir->cntxt, sizeof(WIN32_FIND_DATA)); thedir->dirhand = FindFirstFile(thedir->dirname, thedir->entry); if (thedir->dirhand == INVALID_HANDLE_VALUE) { return APR_EEXIST; } return APR_SUCCESS; } if (FindNextFile(thedir->dirhand, thedir->entry)) { return APR_SUCCESS; } return APR_EEXIST; } ap_status_t ap_rewinddir(struct dir_t *thedir) { ap_status_t stat; ap_context_t *cont = thedir->cntxt; char *temp = strdup(thedir->dirname); temp[strlen(temp) - 2] = '\0'; /*remove the \* at the end */ if (thedir->dirhand == INVALID_HANDLE_VALUE) { return APR_SUCCESS; } if ((stat = ap_closedir(thedir)) == APR_SUCCESS) { if ((stat = ap_opendir(cont, temp, &thedir)) == APR_SUCCESS) { ap_readdir(thedir); return APR_SUCCESS; } } return stat; } ap_status_t ap_make_dir(ap_context_t *cont, const char *path, ap_fileperms_t perm) { if (CreateDirectory(path, NULL)) { return APR_SUCCESS; } return APR_EEXIST; } ap_status_t ap_remove_dir(ap_context_t *cont, const char *path) { DWORD huh; char *temp = canonical_filename(cont, path); if (RemoveDirectory(temp)) { return APR_SUCCESS; } huh = GetLastError(); return APR_EEXIST; } ap_status_t ap_dir_entry_size(struct dir_t *thedir, ap_ssize_t *size) { if (thedir == NULL || thedir->entry == NULL) { return APR_ENODIR; } (*size) = (thedir->entry->nFileSizeHigh * MAXDWORD) + thedir->entry->nFileSizeLow; return APR_SUCCESS; } ap_status_t ap_dir_entry_mtime(struct dir_t *thedir, time_t *time) { if (thedir == NULL || thedir->entry == NULL) { return APR_ENODIR; } *time = WinTimeToUnixTime(&thedir->entry->ftLastWriteTime); return APR_SUCCESS; } ap_status_t ap_dir_entry_ftype(struct dir_t *thedir, ap_filetype_e *type) { switch(thedir->entry->dwFileAttributes) { case FILE_ATTRIBUTE_DIRECTORY: { (*type) = APR_DIR; return APR_SUCCESS; } case FILE_ATTRIBUTE_NORMAL: { (*type) = APR_REG; return APR_SUCCESS; } default: { (*type) = APR_REG; /* As valid as anything else.*/ return APR_SUCCESS; } } } ap_status_t ap_get_dir_filename(struct dir_t *thedir, char **new) { (*new) = ap_pstrdup(thedir->cntxt, thedir->entry->cFileName); return APR_SUCCESS; } 1.1 apache-apr/apr/file_io/win32/file_io.def Index: file_io.def =================================================================== ; file_io.def : LIBRARY file_io DESCRIPTION '' EXPORTS ; Add new API calls to the end of this list. ap_opendir @1 ap_closedir @2 ap_readdir @3 ap_rewinddir @4 ap_make_dir @5 ap_remove_dir @6 ap_dir_entry_size @7 ap_dir_entry_mtime @8 ap_dir_entry_ftype @9 ap_get_dir_filename @10 ap_get_filename @11 ap_get_filesize @12 ap_get_fileatime @13 ap_get_filectime @14 ap_get_filemtime @15 ap_dupfile @16 ap_getfileinfo @17 ap_open @18 ap_close @19 ap_remove_file @20 ap_create_pipe @21 ap_read @22 ap_write @23 ap_seek @24\ 1.1 apache-apr/apr/file_io/win32/file_io.dsp Index: file_io.dsp =================================================================== # Microsoft Developer Studio Project File - Name="file_io" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=file_io - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "file_io.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "file_io.mak" CFG="file_io - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "file_io - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "file_io - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "file_io - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 !ELSEIF "$(CFG)" == "file_io - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\include" /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\misc\win32\Debug\misc.lib ..\..\lib\Debug\lib.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "file_io - Win32 Release" # Name "file_io - Win32 Debug" # Begin Source File SOURCE=.\dir.c # End Source File # Begin Source File SOURCE=.\file_io.def # End Source File # Begin Source File SOURCE=.\fileacc.c # End Source File # Begin Source File SOURCE=.\filedup.c # End Source File # Begin Source File SOURCE=.\fileio.h # End Source File # Begin Source File SOURCE=.\filestat.c # End Source File # Begin Source File SOURCE=.\open.c # End Source File # Begin Source File SOURCE=.\pipe.c # End Source File # Begin Source File SOURCE=.\readwrite.c # End Source File # Begin Source File SOURCE=.\seek.c # End Source File # End Target # End Project 1.1 apache-apr/apr/file_io/win32/fileacc.c Index: fileacc.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" #include <errno.h> #include <string.h> #include <sys/types.h> /* A file to put ALL of the accessor functions for struct file_t types. */ ap_status_t ap_get_filename(struct file_t *thefile, char **new) { if (thefile != NULL) { *new = ap_pstrdup(thefile->cntxt, thefile->fname); return APR_SUCCESS; } else { *new = NULL; return APR_ENOFILE; } } /*mode_t get_fileperms(ap_fileperms_t mode) { mode_t rv = 0; if (mode & APR_UREAD) rv |= S_IRUSR; if (mode & APR_UWRITE) rv |= S_IWUSR; if (mode & APR_UEXECUTE) rv |= S_IXUSR; if (mode & APR_GREAD) rv |= S_IRGRP; if (mode & APR_GWRITE) rv |= S_IWGRP; if (mode & APR_GEXECUTE) rv |= S_IXGRP; if (mode & APR_WREAD) rv |= S_IROTH; if (mode & APR_WWRITE) rv |= S_IWOTH; if (mode & APR_WEXECUTE) rv |= S_IXOTH; return rv; }*/ ap_status_t ap_get_filesize(struct file_t *file, ap_ssize_t *size) { if (file != NULL) { *size = file->size; return APR_SUCCESS; } else { *size = -1; return APR_ENOFILE; } } /* ap_status_t ap_get_fileperms(struct file_t *file, ap_fileperms_t *perm) { if (file != NULL) { *perm = file->protection; return APR_SUCCESS; } else { *perm = -1; return APR_ENOFILE; } } */ ap_status_t ap_get_fileatime(struct file_t *file, time_t *time) { if (file != NULL) { *time = file->atime; return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } ap_status_t ap_get_filectime(struct file_t *file, time_t *time) { if (file != NULL) { *time = file->ctime; return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } ap_status_t ap_get_filemtime(struct file_t *file, time_t *time) { if (file != NULL) { *time = file->mtime; return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } 1.1 apache-apr/apr/file_io/win32/filedup.c Index: filedup.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" #include <string.h> ap_status_t ap_dupfile(struct file_t *old_file, struct file_t **new_file) { (*new_file) = (struct file_t *)ap_palloc(old_file->cntxt, sizeof(struct file_t)); if ((*new_file) == NULL) { return APR_ENOMEM; } (*new_file)->cntxt = old_file->cntxt; (*new_file)->filehand = old_file->filehand; (*new_file)->fname = ap_pstrdup(old_file->cntxt, old_file->fname); (*new_file)->demonfname = ap_pstrdup(old_file->cntxt, old_file->demonfname); (*new_file)->lowerdemonfname = ap_pstrdup(old_file->cntxt, old_file->lowerdemonfname); (*new_file)->buffered = old_file->buffered; (*new_file)->append = old_file->append; /* (*new_file)->protection = old_file->protection; (*new_file)->user = old_file->user; (*new_file)->group = old_file->group;*/ (*new_file)->size = old_file->size; (*new_file)->atime = old_file->atime; (*new_file)->mtime = old_file->mtime; (*new_file)->ctime = old_file->ctime; ap_register_cleanup((*new_file)->cntxt, (void *)(*new_file), file_cleanup, NULL); return APR_SUCCESS; } 1.1 apache-apr/apr/file_io/win32/fileio.h Index: fileio.h =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #ifndef FILE_IO_H #define FILE_IO_H #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> #endif #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #endif #ifdef HAVE_SYS_FCNTL_H #include <fcntl.h> #endif #ifdef HAVE_TIME_H #include <time.h> #endif #ifdef HAVE_DIRENT_H #include <dirent.h> #endif #ifdef HAVE_UIO_H #include <sys/uio.h> #endif #include "apr_win.h" #include "apr_pools.h" #include "apr_general.h" #include "apr_file_io.h" #include "apr_errno.h" struct file_t { ap_context_t *cntxt; HANDLE filehand; char *fname; char *demonfname; char *lowerdemonfname; int buffered; int append; /* mode_t protection; uid_t user; gid_t group;*/ off_t size; time_t atime; time_t mtime; time_t ctime; }; struct dir_t { ap_context_t *cntxt; char *dirname; HANDLE dirhand; WIN32_FIND_DATA *entry; }; struct iovec_t { ap_context_t *cntxt; struct iovec *iovec; }; ap_status_t file_cleanup(void *); /*mode_t get_fileperms(ap_fileperms_t); */ API_EXPORT(char *) ap_os_systemcase_filename(struct context_t *pCont, const char *szFile); char * canonical_filename(struct context_t *pCont, const char *szFile); #endif /* ! FILE_IO_H */ 1.1 apache-apr/apr/file_io/win32/filestat.c Index: filestat.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "apr_win.h" #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_errno.h" ap_status_t ap_getfileinfo(struct file_t *thefile) { FILETIME atime, ctime, mtime; /* thefile->protection = info.st_mode; thefile->user = info.st_uid; thefile->group = info.st_gid;*/ thefile->size = GetFileSize(thefile->filehand, NULL); GetFileTime(thefile->filehand, &ctime, &atime, &mtime); thefile->atime = WinTimeToUnixTime(&atime); thefile->mtime = WinTimeToUnixTime(&mtime); thefile->ctime = WinTimeToUnixTime(&ctime); return APR_SUCCESS; } 1.1 apache-apr/apr/file_io/win32/open.c Index: open.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #ifdef WIN32 #include "apr_win.h" #endif #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" #include <errno.h> #include <string.h> #include <sys/stat.h> ap_status_t file_cleanup(void *thefile) { struct file_t *file = thefile; if (CloseHandle(file->filehand)) { file->filehand = INVALID_HANDLE_VALUE; return APR_SUCCESS; } else { return APR_EEXIST; /* Are there any error conditions other than EINTR or EBADF? */ } } ap_status_t ap_open(ap_context_t *cont, char *fname, ap_int32_t flag, ap_fileperms_t perm, struct file_t **dafile) { DWORD oflags = 0; DWORD createflags = 0; /*mode_t mode = get_fileperms(perm);*/ (*dafile) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t)); (*dafile)->cntxt = cont; if (flag & APR_READ) { oflags |= GENERIC_READ; } if (flag & APR_WRITE) { oflags |= GENERIC_WRITE; } if (!(flag & APR_READ) && !(flag & APR_WRITE)) { (*dafile)->filehand = INVALID_HANDLE_VALUE; return APR_EACCES; } if (flag & APR_BUFFERED) { (*dafile)->buffered = FALSE; } (*dafile)->fname = strdup(fname); (*dafile)->demonfname = canonical_filename((*dafile)->cntxt, fname); (*dafile)->lowerdemonfname = strlwr((*dafile)->demonfname); if (flag & APR_CREATE) { createflags = OPEN_ALWAYS; if (flag & APR_EXCL) { createflags = CREATE_NEW; } } if ((flag & APR_EXCL) && !(flag & APR_CREATE)) { (*dafile)->filehand = INVALID_HANDLE_VALUE; return APR_EACCES; } if (flag & APR_APPEND) { (*dafile)->append = 1; } else { (*dafile)->append = 0; } if (flag & APR_TRUNCATE) { createflags = TRUNCATE_EXISTING; } (*dafile)->filehand = CreateFile(fname, oflags, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, createflags, FILE_ATTRIBUTE_NORMAL, 0); if ((*dafile)->filehand == INVALID_HANDLE_VALUE) { return APR_EEXIST; } if (ap_getfileinfo(*dafile) == APR_SUCCESS) { ap_register_cleanup((*dafile)->cntxt, (void *)(*dafile), file_cleanup, NULL); return APR_SUCCESS; } else { (*dafile)->filehand = INVALID_HANDLE_VALUE; return APR_ENOSTAT; } } ap_status_t ap_close(struct file_t *file) { ap_status_t stat; if ((stat = file_cleanup(file)) == APR_SUCCESS) { ap_kill_cleanup(file->cntxt, file, file_cleanup); return APR_SUCCESS; } return stat; } ap_status_t ap_remove_file(ap_context_t *cont, char *path) { char *temp = canonical_filename(cont, path); if (DeleteFile(temp) == 0) { return APR_SUCCESS; } else { return APR_EEXIST; } } 1.1 apache-apr/apr/file_io/win32/pipe.c Index: pipe.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" #include <errno.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ap_status_t ap_create_pipe(ap_context_t *cont, struct file_t **in, struct file_t **out) { (*in) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t)); (*in)->cntxt = cont; (*in)->fname = ap_pstrdup(cont, "PIPE"); (*out) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t)); (*out)->cntxt = cont; (*out)->fname = ap_pstrdup(cont, "PIPE"); if (CreatePipe((*in)->filehand, (*out)->filehand, NULL, 0) == -1) { return errno; } return APR_SUCCESS; } /* ap_status_t ap_create_namedpipe(ap_context_t *cont, char *dirpath, ap_fileperms_t perm, char **new) { mode_t mode = get_fileperms(perm); *new = tempnam(dirpath, NULL); if (mkfifo((*new), mode) == -1) { return errno; } return APR_SUCCESS; } */ 1.1 apache-apr/apr/file_io/win32/readdir.c Index: readdir.c =================================================================== #include <malloc.h> #include <string.h> #include <errno.h> #include "readdir.h" /********************************************************************** * Implement dirent-style opendir/readdir/closedir on Window 95/NT * * Functions defined are opendir(), readdir() and closedir() with the * same prototypes as the normal dirent.h implementation. * * Does not implement telldir(), seekdir(), rewinddir() or scandir(). * The dirent struct is compatible with Unix, except that d_ino is * always 1 and d_off is made up as we go along. * * The DIR typedef is not compatible with Unix. **********************************************************************/ API_EXPORT(DIR *) opendir(const char *dir) { DIR *dp; char *filespec; long handle; int index; filespec = malloc(strlen(dir) + 2 + 1); strcpy(filespec, dir); index = strlen(filespec) - 1; if (index >= 0 && (filespec[index] == '/' || filespec[index] == '\\')) filespec[index] = '\0'; strcat(filespec, "/*"); dp = (DIR *)malloc(sizeof(DIR)); dp->offset = 0; dp->finished = 0; dp->dir = strdup(dir); if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) { if (errno == ENOENT) dp->finished = 1; else return NULL; } dp->handle = handle; free(filespec); return dp; } API_EXPORT(struct dirent *) readdir(DIR *dp) { if (!dp || dp->finished) return NULL; if (dp->offset != 0) { if (_findnext(dp->handle, &(dp->fileinfo)) < 0) { dp->finished = 1; return NULL; } } dp->offset++; strncpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME); dp->dent.d_ino = 1; dp->dent.d_reclen = strlen(dp->dent.d_name); dp->dent.d_off = dp->offset; return &(dp->dent); } API_EXPORT(int) closedir(DIR *dp) { if (!dp) return 0; _findclose(dp->handle); if (dp->dir) free(dp->dir); if (dp) free(dp); return 0; } 1.1 apache-apr/apr/file_io/win32/readdir.h Index: readdir.h =================================================================== /* * Structures and types used to implement opendir/readdir/closedir * on Windows 95/NT. */ #include <io.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #ifndef API_EXPORT # define API_EXPORT(type) __declspec(dllexport) type __stdcall #endif /* struct dirent - same as Unix */ struct dirent { long d_ino; /* inode (always 1 in WIN32) */ off_t d_off; /* offset to this dirent */ unsigned short d_reclen; /* length of d_name */ char d_name[_MAX_FNAME+1]; /* filename (null terminated) */ }; /* typedef DIR - not the same as Unix */ typedef struct { long handle; /* _findfirst/_findnext handle */ short offset; /* offset into directory */ short finished; /* 1 if there are not more files */ struct _finddata_t fileinfo; /* from _findfirst/_findnext */ char *dir; /* the dir we are reading */ struct dirent dent; /* the dirent to return */ } DIR; /* Function prototypes */ API_EXPORT(DIR *) opendir(const char *); API_EXPORT(struct dirent *) readdir(DIR *); API_EXPORT(int) closedir(DIR *); 1.1 apache-apr/apr/file_io/win32/readwrite.c Index: readwrite.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" #include "apr_errno.h" #include <windows.h> ap_status_t ap_read(const struct file_t *thefile, void *buf, ap_ssize_t *nbytes) { DWORD bread; if (thefile->filehand == INVALID_HANDLE_VALUE) { *nbytes = -1; return APR_EBADF; } if (ReadFile(thefile->filehand, buf, *nbytes, &bread, NULL)) {\ *nbytes = bread; return APR_SUCCESS; } *nbytes = -1; return APR_EEXIST; } ap_status_t ap_write(struct file_t *thefile, void *buf, ap_ssize_t *nbytes) { DWORD bwrote; FILETIME atime, mtime, ctime; if (thefile->filehand == INVALID_HANDLE_VALUE) { *nbytes = -1; return APR_EBADF; } if (WriteFile(thefile->filehand, buf, *nbytes, &bwrote, NULL)) { if (strcmp(thefile->fname, "PIPE")) { FlushFileBuffers(thefile->filehand); thefile->size = GetFileSize(thefile->filehand, NULL); GetFileTime(thefile->filehand, &ctime, &atime, &mtime); thefile->atime = WinTimeToUnixTime(&atime); thefile->mtime = WinTimeToUnixTime(&mtime); thefile->ctime = WinTimeToUnixTime(&ctime); } *nbytes = bwrote; return APR_SUCCESS; } (*nbytes) = -1; return APR_EEXIST; } /* ap_status_t ap_writev(struct file_t *thefile, const struct iovec_t *vec, ap_ssize_t *iocnt) { int bytes; if ((bytes = writev(thefile->filedes, vec->iovec, *iocnt)) < 0) { *iocnt = bytes; return errno; 12} else { *iocnt = bytes; return APR_SUCCESS; } } */ 1.1 apache-apr/apr/file_io/win32/seek.c Index: seek.c =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ #include "fileio.h" #include "apr_file_io.h" #include <errno.h> #include <string.h> ap_status_t ap_seek(struct file_t *thefile, ap_seek_where_t where, ap_off_t *offset) { DWORD howmove; DWORD rv; switch(where) { case APR_SET: { howmove = FILE_BEGIN; break; } case APR_CUR: { howmove = FILE_CURRENT; break; } case APR_END: { howmove = FILE_END; break; } } rv = SetFilePointer(thefile->filehand, *offset,NULL, howmove); if (rv == -1) { *offset = -1; return APR_EEXIST; } else { *offset = rv; return APR_SUCCESS; } } 1.3 +6 -0 apache-apr/apr/include/apr_win.h Index: apr_win.h =================================================================== RCS file: /home/cvs/apache-apr/apr/include/apr_win.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- apr_win.h 1999/06/01 18:15:18 1.2 +++ apr_win.h 1999/06/03 19:43:50 1.3 @@ -58,9 +58,13 @@ #ifndef APR_WIN_H #define APR_WIN_H +#include <windows.h> #include <sys\types.h> #include <stdio.h> +#include <time.h> +typedef enum {APR_WIN_NT, APR_WIN_95, APR_WIN_98} ap_oslevel_e; + typedef _off_t off_t; typedef int pid_t; typedef void Sigfunc(int); @@ -75,6 +79,8 @@ #define strcasecmp(s1, s2) stricmp(s1, s2) #define sleep(t) Sleep(t * 1000) + +time_t WinTimeToUnixTime(FILETIME *); #endif /*APR_WIN_H*/ #endif /*WIN32*/ 1.2 +2 -0 apache-apr/apr/lib/lib.def Index: lib.def =================================================================== RCS file: /home/cvs/apache-apr/apr/lib/lib.def,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- lib.def 1999/06/01 18:52:40 1.1 +++ lib.def 1999/06/03 19:43:53 1.2 @@ -9,6 +9,8 @@ apr_MD5Init @2 apr_MD5Update @3 apr_cpystrn @4 + ap_register_cleanup @5 + ap_kill_cleanup @6 apr_fnmatch @7 apr_is_fnmatch @8 apr_MD5Encode @9 1.25 +4 -2 apache-apr/apr/test/testfile.c Index: testfile.c =================================================================== RCS file: /home/cvs/apache-apr/apr/test/testfile.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- testfile.c 1999/06/02 18:44:55 1.24 +++ testfile.c 1999/06/03 19:43:55 1.25 @@ -64,7 +64,7 @@ int test_filedel(ap_context_t *); int testdirs(ap_context_t *); -int main() +void main() { ap_context_t *context; ap_file_t *thefile = NULL; @@ -297,6 +297,8 @@ fprintf(stdout, "OK\n"); } + ap_close(file); + fprintf(stdout, "\tRemoving file from directory......."); if (ap_remove_file(context, "testdir/testfile") != APR_SUCCESS) { fprintf(stderr, "Could not remove file\n"); @@ -308,7 +310,7 @@ fprintf(stdout, "\tRemoving Directory......."); if (ap_remove_dir(context, "testdir") != APR_SUCCESS) { - fprintf(stderr, "Could not create directory\n"); + fprintf(stderr, "Could not remove directory\n"); return -1; } else { 1.1 apache-apr/apr/test/testfile.dsp Index: testfile.dsp =================================================================== # Microsoft Developer Studio Project File - Name="testfile" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=testfile - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "testfile.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "testfile.mak" CFG="testfile - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "testfile - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "testfile - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "testfile - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 !ELSEIF "$(CFG)" == "testfile - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\include" /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\file_io\win32\Debug\file_io.lib ..\lib\Debug\lib.lib ..\misc\win32\Debug\misc.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "testfile - Win32 Release" # Name "testfile - Win32 Debug" # Begin Source File SOURCE=.\testfile.c # End Source File # End Target # End Project 1.16 +1 -0 apache-apr/include/apr_errno.h Index: apr_errno.h =================================================================== RCS file: /home/cvs/apache-apr/include/apr_errno.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- apr_errno.h 1999/05/26 15:45:58 1.15 +++ apr_errno.h 1999/06/03 19:43:58 1.16 @@ -390,6 +390,7 @@ #define APR_ENOCONT 4005 #define APR_ENOPROC 4006 #define APR_ENOTIME 4007 +#define APR_ENODIR 4008 /* APR STATUS VALUES */ #define APR_INCHILD 5001 1.33 +1 -0 apache-apr/include/apr_file_io.h Index: apr_file_io.h =================================================================== RCS file: /home/cvs/apache-apr/include/apr_file_io.h,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- apr_file_io.h 1999/06/01 12:05:41 1.32 +++ apr_file_io.h 1999/06/03 19:44:00 1.33 @@ -58,6 +58,7 @@ #include "apr_general.h" #include "apr_errno.h" +#include <time.h> #ifdef __cplusplus extern "C" { 1.14 +17 -0 apache-apr/include/apr_general.h Index: apr_general.h =================================================================== RCS file: /home/cvs/apache-apr/include/apr_general.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- apr_general.h 1999/06/02 18:44:24 1.13 +++ apr_general.h 1999/06/03 19:44:02 1.14 @@ -53,9 +53,18 @@ * */ +#ifdef HAVE_MALLOC_H #include <malloc.h> +#endif +#ifdef HAVE_UNISTD_H #include <unistd.h> +#endif +#ifdef HAVE_SYS_TYPES_H #include <sys/types.h> +#endif +#ifdef WIN32 +#include <windows.h> +#endif #include "apr_errno.h" #ifndef APR_GENERAL_H @@ -76,9 +85,17 @@ typedef unsigned long ap_uint64_t; typedef size_t ap_size_t; +#ifdef ssize_t typedef ssize_t ap_ssize_t; +#else +typedef size_t ap_ssize_t; +#endif +#ifdef off_t typedef off_t ap_off_t; +#else +typedef size_t ap_off_t; +#endif typedef struct context_t ap_context_t;