rbb 99/02/25 08:36:38
Modified: apr/file_io/unix open.c Log: Finally got around to testing this code, so here is a working apr_open and apr_close. :) Revision Changes Path 1.7 +22 -17 apache-apr/apr/file_io/unix/open.c Index: open.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/unix/open.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- open.c 1999/02/23 21:07:44 1.6 +++ open.c 1999/02/25 16:36:37 1.7 @@ -55,6 +55,7 @@ #include "apr_file_io.h" #include <errno.h> +#include <string.h> apr_file_t *apr_open(char *fname, apr_int32_t flag, apr_fileperms_t mode) { @@ -62,53 +63,56 @@ apr_file_t *dafile = (apr_file_t *)malloc(sizeof(apr_file_t)); struct stat info; - if ((flag && APR_READ) && (flag && APR_WRITE)) { + if ((flag & APR_READ) && (flag & APR_WRITE)) { oflags = O_RDWR; } - else if (flag && APR_READ) { + else if (flag & APR_READ) { oflags = O_RDONLY; } - else if (flag && APR_WRITE) { + else if (flag & APR_WRITE) { oflags = O_WRONLY; } else { errno = EACCES; - return NULL; + free(dafile); + return NULL; } - if (flag && APR_BUFFERED) { + if (flag & APR_BUFFERED) { dafile->buffered = TRUE; } - strcpy(dafile->fname, fname); + dafile->fname = strdup(fname); - if (flag && APR_CREATE) { + if (flag & APR_CREATE) { oflags |= O_CREAT; - if (flag && APR_EXCL) { + if (flag & APR_EXCL) { oflags |= O_EXCL; } } - if ((flag && APR_EXCL) && !(flag && APR_CREATE)) { + if ((flag & APR_EXCL) && !(flag & APR_CREATE)) { errno = EACCES; - return NULL; + free(dafile); + return NULL; } - if (flag && APR_APPEND) { + if (flag & APR_APPEND) { oflags |= O_APPEND; } - if (flag && APR_TRUNCATE) { - oflags = O_TRUNC; + if (flag & APR_TRUNCATE) { + oflags |= O_TRUNC; } - if (flag && APR_NONBLOCK) { - oflags = O_NONBLOCK; + if (flag & APR_NONBLOCK) { + oflags |= O_NONBLOCK; } else { - oflags = O_SYNC; + oflags |= O_SYNC; } dafile->filedes = open(fname, oflags, mode); if (dafile->filedes < 0) { dafile->filedes = -1; + free(dafile); return NULL; } @@ -124,7 +128,8 @@ } else { errno = ENOSTAT; - return NULL; + free(dafile); + return NULL; } }