rbb         99/02/22 05:04:10

  Added:       apr/file_io/unix open.c
  Log:
  This is the initial revision of the apr_open routine.  Hasn't been tested
  yet, but I'll get to it later this week.
  
  Revision  Changes    Path
  1.1                  apache-apr/apr/file_io/unix/open.c
  
  Index: open.c
  ===================================================================
  #include "file_io.h"
  
  API_EXPORT(APRFile *) apr_open(char *fname, int flag, mode_t mode)
  {
      int oflags = 0;
      APR_FILE *dafile;
      struct stat info;
  
      if ((flag && APR_READ) && (flag && APR_WRITE))
          oflags = O_RDWR;
      else if (flag && APR_READ)
          oflags = O_RDONLY;
      else if (flag && APR_WRITE)
          oflags = O_WRONLY;
      else {
          errno = EACCESS;
        return NULL;
      }
  
      if (flag && APR_BUFFERED)
          dafile->buffered = TRUE
      strcpy(dafile->fname, fname);
  
      if (flag && APR_CREATE) {
          oflags |= O_CREAT;
        if (flag && APR_EXCL)
            oflags |= O_EXCL;
      }
      if ((flag && APR_EXCL) && !(flag && APR_CREATE)) {
          errno = EACCESS;
        return NULL;
      }   
  
      if (flag && APR_APPEND)
          oflags |= O_APPEND;
      if (flag && APR_TRUNCATE)
          oflags = O_TRUNC;
      if (flag && APR_NONBLOCK)
          oflags = O_NONBLOCK;
      else
          oflags = O_SYNC;
   
      dafile->filedes = open(fname, oflags, mode);
      
      if (dafile->filedes < 0) 
          return NULL;
      
      if (stat(dafile->filedes, &info) == 0) {
          dafile->protection = info.st_mode;
        dafile->user = info.st_uid;
        dafile->group = info.st_gid;
        dafile->size = info.st_size;
        dafile->atime = info.st_atime;
        dafile->mtime = info.st_mtime;
        dafile->ctime = info.st_ctime;
        return dafile;
      } else {
          errno = ENOSTAT;
        return NULL;
      }
  }
  
  
  

Reply via email to