bjh 99/06/04 06:13:21
Modified: apr/file_io/os2 filedup.c filestat.c maperrorcode.c open.c readwrite.c seek.c Added: apr/file_io/os2 dir.c fileacc.c pipe.c fileio.h Log: Update file_io lib for OS/2 to current spec. Revision Changes Path 1.3 +14 -20 apache-apr/apr/file_io/os2/filedup.c Index: filedup.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/filedup.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- filedup.c 1999/05/10 14:36:22 1.2 +++ filedup.c 1999/06/04 13:13:16 1.3 @@ -53,39 +53,33 @@ * */ +#include "fileio.h" #include "apr_file_io.h" -#include "apr_general.h" +#include "apr_lib.h" #include <string.h> #define INCL_DOS #include <os2.h> -ap_file_t *ap_dupfile(ap_file_t *old_file) +ap_status_t ap_dupfile(struct file_t *old_file, struct file_t **new_file) { int rv; - ap_file_t * new_file = (ap_file_t *)malloc(sizeof(ap_file_t)); + struct file_t *dup_file = (struct file_t *)ap_palloc(old_file->cntxt, sizeof(struct file_t)); if (new_file == NULL) { - errno = ENOMEM; - return NULL; + return APR_ENOMEM; } - rv = DosDupHandle(old_file->filedes, (ULONG *)&new_file->filedes); + rv = DosDupHandle(old_file->filedes, &dup_file->filedes); - if ( rv ) { - errno = os2errno(rv); - free(new_file); - return NULL; + if (rv) { + return os2errno(rv); } - old_file->filedes = new_file->filedes; - old_file->fname = strdup(new_file->fname); - old_file->buffered = new_file->buffered; - old_file->protection = new_file->protection; - old_file->user = new_file->user; - old_file->group = new_file->group; - old_file->size = new_file->size; - old_file->atime = new_file->atime; - old_file->mtime = new_file->mtime; - old_file->ctime = new_file->ctime; + dup_file->cntxt = old_file->cntxt; + dup_file->fname = ap_pstrdup(dup_file->cntxt, old_file->fname); + dup_file->buffered = old_file->buffered; + dup_file->status = old_file->status; + *new_file = dup_file; + return APR_SUCCESS; } 1.3 +23 -36 apache-apr/apr/file_io/os2/filestat.c Index: filestat.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/filestat.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- filestat.c 1999/05/10 14:36:22 1.2 +++ filestat.c 1999/06/04 13:13:17 1.3 @@ -53,9 +53,10 @@ * */ +#include "fileio.h" #include "apr_file_io.h" -#include "apr_general.h" -#include "apr_errno.h" +#include "apr_lib.h" +#include <sys/time.h> #define INCL_DOS #include <os2.h> @@ -90,47 +91,33 @@ return mktime( &tmpdate ); } -ap_status_t ap_getfileinfo(char * fname, ap_file_t *thefile) -{ - FILESTATUS3 info; - int rv = DosQueryPathInfo(fname, FIL_STANDARD, &info, sizeof(info)); + - if (rv == 0) { - thefile->protection = (info.attrFile & FILE_READONLY) ? 0555 : 0777; - thefile->user = 0; - thefile->group = 0; - thefile->size = info.cbFile; - thefile->atime = os2date2unix(info.fdateLastAccess, info.ftimeLastAccess); - thefile->mtime = os2date2unix(info.fdateLastWrite, info.ftimeLastWrite); - thefile->ctime = os2date2unix(info.fdateCreation, info.ftimeCreation); +ap_status_t ap_getfileinfo(struct file_t *thefile) +{ + ULONG rc = DosQueryPathInfo(thefile->fname, FIL_STANDARD, &thefile->status, sizeof(thefile->status)); + + if (rc == 0) { + thefile->validstatus = TRUE; return APR_SUCCESS; } - else { - errno = ENOSTAT; - return APR_FAILURE; - } + + thefile->validstatus = FALSE; + return os2errno(rc); } -ap_status_t ap_updatefileinfo(ap_file_t *thefile) -{ - FILESTATUS3 info; - int rv = DosQueryFileInfo(thefile->filedes, FIL_STANDARD, &info, sizeof(info)); - if (rv == 0) { - thefile->protection = (info.attrFile & FILE_READONLY) ? 0555 : 0777; - thefile->user = 0; - thefile->group = 0; - thefile->size = info.cbFile; - thefile->atime = os2date2unix(info.fdateLastAccess, info.ftimeLastAccess); - thefile->mtime = os2date2unix(info.fdateLastWrite, info.ftimeLastWrite); - thefile->ctime = os2date2unix(info.fdateCreation, info.ftimeCreation); + +ap_status_t ap_updatefileinfo(struct file_t *thefile) +{ + ULONG rc = DosQueryFileInfo(thefile->filedes, FIL_STANDARD, &thefile->status, sizeof(thefile->status)); + + if (rc == 0) { + thefile->validstatus = TRUE; return APR_SUCCESS; - } - else { - errno = ENOSTAT; - return APR_FAILURE; } + + thefile->validstatus = FALSE; + return os2errno(rc); } - - 1.2 +13 -12 apache-apr/apr/file_io/os2/maperrorcode.c Index: maperrorcode.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/maperrorcode.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- maperrorcode.c 1999/04/09 18:39:15 1.1 +++ maperrorcode.c 1999/06/04 13:13:17 1.2 @@ -61,18 +61,19 @@ #include <os2.h> int errormap[][2] = { - { ERROR_FILE_NOT_FOUND, ENOENT }, - { ERROR_PATH_NOT_FOUND, ENOENT }, - { ERROR_TOO_MANY_OPEN_FILES, EMFILE }, - { ERROR_ACCESS_DENIED, EACCES }, - { ERROR_SHARING_VIOLATION, EACCES }, - { ERROR_INVALID_PARAMETER, EINVAL }, - { ERROR_OPEN_FAILED, ENOENT }, - { ERROR_DISK_FULL, ENOSPC }, - { ERROR_FILENAME_EXCED_RANGE, ENAMETOOLONG }, - { ERROR_INVALID_FUNCTION, EINVAL }, - { ERROR_INVALID_HANDLE, EBADF }, - { ERROR_NEGATIVE_SEEK, ESPIPE } + { NO_ERROR, APR_SUCCESS }, + { ERROR_FILE_NOT_FOUND, APR_ENOENT }, + { ERROR_PATH_NOT_FOUND, APR_ENOENT }, + { ERROR_TOO_MANY_OPEN_FILES, APR_EMFILE }, + { ERROR_ACCESS_DENIED, APR_EACCES }, + { ERROR_SHARING_VIOLATION, APR_EACCES }, + { ERROR_INVALID_PARAMETER, APR_EINVAL }, + { ERROR_OPEN_FAILED, APR_ENOENT }, + { ERROR_DISK_FULL, APR_ENOSPC }, + { ERROR_FILENAME_EXCED_RANGE, APR_ENAMETOOLONG }, + { ERROR_INVALID_FUNCTION, APR_EINVAL }, + { ERROR_INVALID_HANDLE, APR_EBADF }, + { ERROR_NEGATIVE_SEEK, APR_ESPIPE } }; #define MAPSIZE (sizeof(errormap)/sizeof(errormap[0])) 1.3 +49 -42 apache-apr/apr/file_io/os2/open.c Index: open.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/open.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- open.c 1999/05/10 14:36:22 1.2 +++ open.c 1999/06/04 13:13:17 1.3 @@ -53,22 +53,35 @@ * */ +#include "fileio.h" #include "apr_file_io.h" -#include <errno.h> +#include "apr_lib.h" #include <string.h> #define INCL_DOS #include <os2.h> -ap_file_t *ap_open(char *fname, ap_int32_t flag, ap_fileperms_t mode) +ap_status_t file_cleanup(void *thefile) { + struct file_t *file = thefile; + return ap_close(file); +} + + + +ap_status_t ap_open(ap_context_t *cntxt, char *fname, ap_int32_t flag, ap_fileperms_t perm, struct file_t **new) +{ int oflags = 0; int mflags = OPEN_FLAGS_FAIL_ON_ERROR|OPEN_SHARE_DENYNONE; int rv; - ap_file_t *dafile = (ap_file_t *)malloc(sizeof(ap_file_t)); - struct stat info; ULONG action; + ap_file_t *dafile = (struct file_t *)ap_palloc(cntxt, sizeof(struct file_t)); + *new = dafile; + dafile->cntxt = cntxt; + dafile->isopen = FALSE; + dafile->validstatus = FALSE; + if ((flag & APR_READ) && (flag & APR_WRITE)) { mflags |= OPEN_ACCESS_READWRITE; } else if (flag & APR_READ) { @@ -76,14 +89,11 @@ } else if (flag & APR_WRITE) { mflags |= OPEN_ACCESS_WRITEONLY; } else { - errno = EACCES; - free(dafile); - return NULL; + dafile->filedes = -1; + return APR_EACCES; } - if (flag & APR_BUFFERED) { - dafile->buffered = TRUE; - } + dafile->buffered = (flag & APR_BUFFERED) > 0; if (flag & APR_CREATE) { oflags |= OPEN_ACTION_CREATE_IF_NEW; @@ -95,11 +105,8 @@ } } - if ((flag & APR_EXCL) && !(flag & APR_CREATE)) { - errno = EACCES; - free(dafile); - return NULL; - } + if ((flag & APR_EXCL) && !(flag & APR_CREATE)) + return APR_EACCES; if (flag & APR_TRUNCATE) { oflags |= OPEN_ACTION_REPLACE_IF_EXISTS; @@ -110,42 +117,42 @@ if (rv == 0 && (flag & APR_APPEND)) { ULONG newptr; rv = DosSetFilePtr(dafile->filedes, 0, FILE_END, &newptr ); + + if (rv) + DosClose(dafile->filedes); } - if (rv != 0) { - free(dafile); - return NULL; - } - - if (ap_updatefileinfo(dafile) == APR_SUCCESS) { - dafile->fname = strdup(fname); - return dafile; - } else { - errno = ENOSTAT; - free(dafile); - return NULL; - } + if (rv != 0) + return os2errno(rv); + + dafile->isopen = TRUE; + dafile->fname = ap_pstrdup(cntxt, fname); + return APR_SUCCESS; } + + ap_status_t ap_close(ap_file_t *file) { - if (DosClose(file->filedes) == 0) { - free(file->fname); - free(file); - return APR_SUCCESS; - } else { - return APR_FAILURE; - /* Are there any error conditions other than EINTR or EBADF? */ + ULONG rc; + + if (file && file->isopen) { + rc = DosClose(file->filedes); + + if (rc == 0) { + file->isopen = FALSE; + return APR_SUCCESS; + } else { + return os2errno(rc); + } } } + + -ap_status_t ap_remove_file(char *path) +ap_status_t ap_remove_file(ap_context_t *cntxt, char *path) { - if (DosDelete(path) == 0) { - return APR_SUCCESS; - } - else { - return APR_FAILURE; - } + ULONG rc = DosDelete(path); + return os2errno(rc); } 1.3 +34 -24 apache-apr/apr/file_io/os2/readwrite.c Index: readwrite.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/readwrite.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- readwrite.c 1999/05/10 14:36:23 1.2 +++ readwrite.c 1999/06/04 13:13:18 1.3 @@ -53,43 +53,53 @@ * */ +#include "fileio.h" #include "apr_file_io.h" -#include "apr_general.h" -#include "apr_errno.h" -#include <errno.h> -#include <unistd.h> +#include "apr_lib.h" -ap_ssize_t ap_read(ap_file_t *thefile, void *buf, ap_ssize_t nbytes) +#define INCL_DOS +#include <os2.h> + +ap_status_t ap_read(const struct file_t *thefile, void *buf, ap_ssize_t *nbytes) { - ap_size_t rv; + ULONG rc; + ULONG bytesread; - if (thefile->filedes < 0) { - errno = EBADF; - return -1; + if (!thefile->isopen) { + *nbytes = 0; + return APR_EBADF; } - rv = read(thefile->filedes, buf, nbytes); + rc = DosRead(thefile->filedes, buf, *nbytes, &bytesread); - return rv; + if (rc) { + *nbytes = 0; + return os2errno(rc); + } + + *nbytes = bytesread; + return APR_SUCCESS; } + + -ap_ssize_t ap_write(ap_file_t *thefile, void * buf, ap_ssize_t nbytes) +ap_status_t ap_write(struct file_t *thefile, void *buf, ap_ssize_t *nbytes) { - ap_size_t rv; - struct stat info; + ULONG rc; + ULONG byteswritten; - if (thefile->filedes < 0) { - errno = EBADF; - return -1; + if (!thefile->isopen) { + *nbytes = 0; + return APR_EBADF; } - rv = write(thefile->filedes, buf, nbytes); + rc = DosWrite(thefile->filedes, buf, *nbytes, &byteswritten); - if (stat(thefile->fname, &info) == 0) { - thefile->size = info.st_size; - thefile->atime = info.st_atime; - thefile->mtime = info.st_mtime; - thefile->ctime = info.st_ctime; + if (rc) { + *nbytes = 0; + return os2errno(rc); } - return rv; + + *nbytes = byteswritten; + return APR_SUCCESS; } 1.3 +11 -17 apache-apr/apr/file_io/os2/seek.c Index: seek.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/os2/seek.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- seek.c 1999/05/10 14:36:23 1.2 +++ seek.c 1999/06/04 13:13:18 1.3 @@ -53,8 +53,9 @@ * */ +#include "fileio.h" #include "apr_file_io.h" -#include <errno.h> +#include "apr_lib.h" #include <string.h> #include <io.h> @@ -63,32 +64,25 @@ int os2errno( ULONG oserror ); -ap_off_t ap_seek(ap_file_t *file, ap_off_t offset, ap_seek_where_t origin) +ap_status_t ap_seek(struct file_t *thefile, ap_seek_where_t where, ap_off_t *offset) { - int rv; - ULONG newpos; + if (!thefile->isopen) { + return APR_EBADF; + } - switch (origin) { + switch (where) { case APR_SET: - origin = FILE_BEGIN; + where = FILE_BEGIN; break; case APR_CUR: - origin = FILE_CURRENT; + where = FILE_CURRENT; break; case APR_END: - origin = FILE_END; + where = FILE_END; break; } - rv = DosSetFilePtr(file->filedes, offset, origin, &newpos); - printf( "DosSetFilePtr()=%d\n", rv ); - - if (rv) { - errno = os2errno( rv ); - return -1; - } - - return newpos; + return os2errno(DosSetFilePtr(thefile->filedes, *offset, where, (ULONG *)&offset)); } 1.1 apache-apr/apr/file_io/os2/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/>. * */ #include "fileio.h" #include "apr_file_io.h" #include "apr_lib.h" #include <string.h> #define INCL_DOS #include <os2.h> ap_status_t dir_cleanup(void *thedir) { struct dir_t *dir = thedir; return ap_closedir(dir); } ap_status_t ap_opendir(ap_context_t *cntxt, const char *dirname, struct dir_t **new) { struct dir_t *thedir = (struct dir_t *)ap_palloc(cntxt, sizeof(struct dir_t)); if (thedir == NULL) return APR_ENOMEM; thedir->cntxt = cntxt; thedir->dirname = ap_pstrdup(cntxt, dirname); thedir->handle = 0; thedir->validentry = FALSE; *new = thedir; return APR_SUCCESS; } ap_status_t ap_closedir(struct dir_t *thedir) { int rv = 0; if (thedir->handle) { rv = DosFindClose(thedir->handle); if (rv == 0) { thedir->handle = 0; } } return os2errno(rv); } ap_status_t ap_readdir(struct dir_t *thedir) { int rv; ULONG entries = 1; if (thedir->handle == 0) { thedir->handle = HDIR_CREATE; rv = DosFindFirst(ap_pstrcat(thedir->cntxt, thedir->dirname, "/*", NULL), &thedir->handle, FILE_ARCHIVED|FILE_DIRECTORY|FILE_SYSTEM|FILE_HIDDEN|FILE_READONLY, &thedir->entry, sizeof(thedir->entry), &entries, FIL_STANDARD); } else { rv = DosFindNext(thedir->handle, &thedir->entry, sizeof(thedir->entry), &entries); } if (rv == 0 && entries == 1) { thedir->validentry = TRUE; return APR_SUCCESS; } thedir->validentry = FALSE; if (rv) return os2errno(rv); return APR_ENOENT; } ap_status_t ap_rewinddir(struct dir_t *thedir) { return ap_closedir(thedir); } ap_status_t ap_make_dir(ap_context_t *cont, const char *path, ap_fileperms_t perm) { return os2errno(DosCreateDir(path, NULL)); } ap_status_t ap_remove_dir(ap_context_t *cont, const char *path) { return os2errno(DosDeleteDir(path)); } ap_status_t ap_dir_entry_size(struct dir_t *thedir, ap_ssize_t *size) { if (thedir->validentry) { *size = thedir->entry.cbFile; return APR_SUCCESS; } return APR_ENOFILE; } ap_status_t ap_dir_entry_mtime(struct dir_t *thedir, time_t *time) { if (thedir->validentry) { *time = os2date2unix(thedir->entry.fdateLastWrite, thedir->entry.ftimeLastWrite); return APR_SUCCESS; } return APR_ENOFILE; } ap_status_t ap_dir_entry_ftype(struct dir_t *thedir, ap_filetype_e *type) { int rc; HFILE hFile; ULONG action, Type, Attr; ap_filetype_e typemap[8] = { APR_REG, APR_CHR, APR_PIPE }; if (thedir->validentry) { if (thedir->entry.attrFile & FILE_DIRECTORY) { *type = APR_DIR; return APR_SUCCESS; } else { rc = DosOpen(ap_pstrcat(thedir->cntxt, thedir->dirname, "/", thedir->entry.achName, NULL) , &hFile, &action, 0, 0, OPEN_ACTION_FAIL_IF_NEW|OPEN_ACTION_OPEN_IF_EXISTS, OPEN_SHARE_DENYNONE|OPEN_ACCESS_READONLY, NULL); if ( rc == 0 ) { rc = DosQueryHType( hFile, &Type, &Attr ); if ( rc == 0 ) { *type = typemap[(Type & 0x0007)]; } DosClose( hFile ); } return os2errno(rc); } } return APR_ENOFILE; } ap_status_t ap_get_dir_filename(struct dir_t *thedir, char **new) { if (thedir->validentry) { *new = thedir->entry.achName; return APR_SUCCESS; } return APR_ENOFILE; } 1.1 apache-apr/apr/file_io/os2/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; } } ap_status_t ap_get_filesize(struct file_t *file, ap_ssize_t *size) { ap_status_t rv; if (file != NULL) { if (!file->validstatus) { rv = ap_updatefileinfo(file); if (rv) return rv; } *size = file->status.cbFile; return APR_SUCCESS; } else { *size = -1; return APR_ENOFILE; } } ap_status_t ap_get_fileperms(struct file_t *file, ap_fileperms_t *perm) { ap_status_t rv; if (file != NULL) { if (!file->validstatus) { rv = ap_updatefileinfo(file); if (rv) return rv; } *perm = (file->status.attrFile & FILE_READONLY) ? 0555 : 0777; return APR_SUCCESS; } else { *perm = -1; return APR_ENOFILE; } } ap_status_t ap_get_fileatime(struct file_t *file, time_t *time) { ap_status_t rv; if (file != NULL) { if (!file->validstatus) { rv = ap_updatefileinfo(file); if (rv) return rv; } *time = os2date2unix( file->status.fdateLastAccess, file->status.ftimeLastAccess ); return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } ap_status_t ap_get_filectime(struct file_t *file, time_t *time) { ap_status_t rv; if (file != NULL) { if (!file->validstatus) { rv = ap_updatefileinfo(file); if (rv) return rv; } *time = os2date2unix( file->status.fdateCreation, file->status.ftimeCreation ); return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } ap_status_t ap_get_filemtime(struct file_t *file, time_t *time) { ap_status_t rv; if (file != NULL) { if (!file->validstatus) { rv = ap_updatefileinfo(file); if (rv) return rv; } *time = os2date2unix( file->status.fdateLastWrite, file->status.ftimeLastWrite ); return APR_SUCCESS; } else { *time = -1; return APR_ENOFILE; } } 1.1 apache-apr/apr/file_io/os2/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 <string.h> ap_status_t ap_create_pipe(ap_context_t *cont, struct file_t **in, struct file_t **out) { ULONG filedes[2]; ULONG rc; rc = DosCreatePipe(filedes, filedes+1, 4096); if (rc) { return os2errno(rc); } (*in) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t)); (*in)->cntxt = cont; (*in)->filedes = filedes[0]; (*in)->fname = ap_pstrdup(cont, "PIPE"); (*out) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t)); (*out)->cntxt = cont; (*out)->filedes = filedes[1]; (*out)->fname = ap_pstrdup(cont, "PIPE"); return APR_SUCCESS; } ap_status_t ap_create_namedpipe(ap_context_t *cont, char *dirpath, ap_fileperms_t perm, char **new) { /* Not yet implemented, interface not suitable */ return -1; } 1.1 apache-apr/apr/file_io/os2/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 #define INCL_DOS #include <os2.h> #include "apr_general.h" #include "apr_file_io.h" #include "apr_errno.h" struct file_t { ap_context_t *cntxt; ULONG filedes; char * fname; int isopen; int buffered; FILESTATUS3 status; int validstatus; }; struct dir_t { ap_context_t *cntxt; char *dirname; ULONG handle; FILEFINDBUF3 entry; int validentry; }; struct iovec_t { struct iovec *iovec; }; ap_status_t file_cleanup(void *); mode_t get_fileperms(ap_fileperms_t); long os2date2unix( FDATE os2date, FTIME os2time ); #endif /* ! FILE_IO_H */