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;
}
}