You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by st...@hyperreal.org on 2000/01/17 20:37:56 UTC

cvs commit: apache-2.0/src/os/win32 os.h

stoddard    00/01/17 11:37:56

  Modified:    src      ApacheCore.def
               src/lib/apr/file_io/win32 fileacc.c filestat.c
               src/lib/apr/include apr_time.h apr_win.h
               src/main http_protocol.c
               src/os/win32 os.h
  Log:
  Update Windows port to new file_io and time specs
  
  Revision  Changes    Path
  1.10      +6 -6      apache-2.0/src/ApacheCore.def
  
  Index: ApacheCore.def
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/ApacheCore.def,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ApacheCore.def	1999/12/20 19:52:44	1.9
  +++ ApacheCore.def	2000/01/17 19:37:51	1.10
  @@ -100,7 +100,7 @@
   	ap_find_token   @93
   	ap_get_basic_auth_pw   @94
   	ap_get_client_block   @95
  -	ap_get_gmtoff   @96
  +;	ap_get_gmtoff   @96
   	ap_get_limit_req_body   @97
   	ap_get_remote_host   @98
   	ap_get_remote_logname   @99
  @@ -108,7 +108,7 @@
   	ap_get_server_name   @101
   	ap_get_server_port   @102
   	;ap_get_server_version   @103
  -	ap_get_time   @104
  +;	ap_get_time   @104
   	ap_get_token   @105
   	ap_getparents   @106
   	ap_getword   @107
  @@ -119,7 +119,7 @@
   	ap_getword_nulls_nc   @112
   	ap_getword_white   @113
   	ap_getword_white_nc   @114
  -	ap_gm_timestr_822   @115
  +;	ap_gm_timestr_822   @115
   	ap_gname2id   @116
   	ap_handle_command   @117
   	;ap_hard_timeout   @118
  @@ -250,7 +250,7 @@
   ;	ap_table_set   @243
   ;	ap_table_setn   @244
   ;	ap_table_unset   @245
  -	ap_tm2sec   @246
  +;	ap_tm2sec   @246
   	ap_uname2id   @247
   	;ap_unblock_alarms   @248
   	ap_unescape_url   @249
  @@ -274,14 +274,14 @@
   	alias_module   @267
   	ap_bprintf   @268
   	ap_bvputs   @269
  -	ap_day_snames @270  
  +;	ap_day_snames @270  
   	;ap_extended_status  @271   
   	ap_limit_section   @272
   	ap_loaded_modules   @273
   	ap_log_error   @274
   	ap_log_printf   @275
   	ap_log_rerror   @276
  -	ap_month_snames  @277
  +;	ap_month_snames  @277
   ;	ap_null_cleanup   @278
   ;	ap_psprintf   @279
   ;	ap_pstrcat   @280
  
  
  
  1.10      +1 -66     apache-2.0/src/lib/apr/file_io/win32/fileacc.c
  
  Index: fileacc.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/win32/fileacc.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- fileacc.c	1999/11/02 14:24:56	1.9
  +++ fileacc.c	2000/01/17 19:37:52	1.10
  @@ -103,20 +103,7 @@
       return rv;
   }*/
   
  -ap_status_t ap_get_filesize(ap_ssize_t *size, struct file_t *file)
  -{
  -    if (file != NULL) {
  -        if (!file->stated) {
  -            ap_getfileinfo(file);
  -        }
  -        *size = file->size;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *size = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  +
   /*
   ap_status_t ap_get_fileperms(ap_fileperms_t *perm, struct file_t *file)
   {
  @@ -130,59 +117,7 @@
       }
   }
   */
  -ap_status_t ap_get_fileatime(time_t *time, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        *time = file->atime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *time = -1;
  -        return APR_ENOFILE;
  -    }
  -}
   
  -ap_status_t ap_get_filectime(time_t *time, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        *time = file->ctime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *time = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -ap_status_t ap_get_filemtime(time_t *time, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        *time = file->mtime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *time = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -ap_status_t ap_get_filetype(ap_filetype_e *type, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        if (!file->stated) {
  -            ap_getfileinfo(file);
  -        }
  -        if (file->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  -            *type = APR_DIR;
  -        else
  -            *type = APR_REG;
  -
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *type = APR_REG;
  -        return APR_ENOFILE;
  -    }
  -}
   ap_status_t ap_get_filedata(void **data, char *key, struct file_t *file)
   {    
       if (file != NULL) {
  
  
  
  1.4       +66 -11    apache-2.0/src/lib/apr/file_io/win32/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/win32/filestat.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- filestat.c	1999/12/09 21:00:08	1.3
  +++ filestat.c	2000/01/17 19:37:52	1.4
  @@ -58,19 +58,74 @@
   #include "apr_file_io.h"
   #include "apr_general.h"
   #include "apr_errno.h"
  -/* TODO: Handle the case when the file has not been opened */
  -ap_status_t ap_getfileinfo(struct file_t *thefile)
  +#include <sys/stat.h>
  +
  +#define S_ISLNK(m) (0)
  +#ifndef S_ISREG
  +#define S_ISREG(m)      (((m)&(S_IFMT)) == (S_IFREG))
  +#endif
  +#ifndef S_ISDIR
  +#define S_ISDIR(m) (((m) & S_IFDIR) == S_IFDIR)
  +#endif
  +
  +static ap_filetype_e filetype_from_mode(int mode)
   {
  -    BY_HANDLE_FILE_INFORMATION info;
  -    GetFileInformationByHandle(thefile->filehand, &info);
  -    thefile->dwFileAttributes = info.dwFileAttributes;
  -    thefile->size = info.nFileSizeLow; /* This is broken for files > ?? */
  -    thefile->atime = WinTimeToUnixTime(&info.ftLastAccessTime);
  -    thefile->ctime = WinTimeToUnixTime(&info.ftCreationTime);
  -    thefile->mtime = WinTimeToUnixTime(&info.ftLastWriteTime);
  -    thefile->stated = 1; 
  +    ap_filetype_e type = APR_NOFILE;
   
  -    return APR_SUCCESS;
  +    if (S_ISREG(mode))
  +        type = APR_REG;
  +    if (S_ISDIR(mode))
  +        type = APR_DIR;
  +    if (S_ISLNK(mode))
  +        type = APR_LNK;
  +
  +    return type;
   }
   
  +ap_status_t ap_getfileinfo(ap_finfo_t *finfo, struct file_t *thefile)
  +{
  +    /* TODO: 
  +     * Windows should call GetFileInformationByHandle(), which is similar 
  +     * to fstat(), for the best performance. Then we would need to map the 
  +     * BY_HANDLE_FILE_INFORMATION to ap_finfo_t. 
  +     */
  +    struct stat info;
  +    int rv = stat(thefile->fname, &info);
  +
  +    if (rv == 0) {
  +        finfo->protection = info.st_mode;
  +        finfo->filetype = filetype_from_mode(info.st_mode);
  +        finfo->user = info.st_uid;
  +        finfo->group = info.st_gid;
  +        finfo->size = info.st_size;
  +        finfo->inode = info.st_ino;
  +        ap_ansi_time_to_ap_time(&finfo->atime, info.st_atime);
  +        ap_ansi_time_to_ap_time(&finfo->mtime, info.st_mtime);
  +        ap_ansi_time_to_ap_time(&finfo->ctime, info.st_ctime);
  +        return APR_SUCCESS;
  +    }
  +    else {
  +        return APR_ENOSTAT;
  +    }
  +}
  +ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_context_t *cont)
  +{
  +    struct stat info;
  +    int rv = stat(fname, &info);
  +    if (rv == 0) {
  +        finfo->protection = info.st_mode;
  +        finfo->filetype = filetype_from_mode(info.st_mode);
  +        finfo->user = info.st_uid;
  +        finfo->group = info.st_gid;
  +        finfo->size = info.st_size;
  +        finfo->inode = info.st_ino;
  +        ap_ansi_time_to_ap_time(&finfo->atime, info.st_atime);
  +        ap_ansi_time_to_ap_time(&finfo->mtime, info.st_mtime);
  +        ap_ansi_time_to_ap_time(&finfo->ctime, info.st_ctime);
  +        return APR_SUCCESS;
  +    }
  +    else {
  +        return APR_ENOSTAT;
  +    }
  +}
   
  
  
  
  1.12      +4 -0      apache-2.0/src/lib/apr/include/apr_time.h
  
  Index: apr_time.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_time.h,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- apr_time.h	2000/01/09 05:18:19	1.11
  +++ apr_time.h	2000/01/17 19:37:53	1.12
  @@ -69,7 +69,11 @@
   /* number of microseconds since 00:00:00 january 1, 1970 UTC */
   typedef ap_int64_t ap_time_t;
   
  +#ifdef WIN32
  +#define AP_USEC_PER_SEC ((LONGLONG) 1000000)
  +#else
   #define AP_USEC_PER_SEC (1000000LL)
  +#endif
   
   /* the time right now */
   ap_time_t ap_now(void);
  
  
  
  1.11      +3 -1      apache-2.0/src/lib/apr/include/apr_win.h
  
  Index: apr_win.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_win.h,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- apr_win.h	2000/01/03 16:16:24	1.10
  +++ apr_win.h	2000/01/17 19:37:53	1.11
  @@ -120,14 +120,16 @@
   typedef  int         ap_ssize_t;
   typedef  _off_t      ap_off_t;
   typedef  int         pid_t;
  +typedef  int         uid_t;
  +typedef  int         gid_t;
   
  -
   /* Definitions that APR programs need to work properly. */
   #define APR_SSIZE_T_FMT          "d"
   #define API_THREAD_FUNC          __stdcall
   #define API_EXPORT(type)         type
   #define API_EXPORT_NONSTD(type)  type
   #define API_VAR_IMPORT           extern _declspec(dllimport)
  +#define API_VAR_EXPORT
   
   /* struct iovec is needed to emulate Unix writev */
   struct iovec {
  
  
  
  1.48      +1 -6      apache-2.0/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_protocol.c,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- http_protocol.c	2000/01/12 18:20:43	1.47
  +++ http_protocol.c	2000/01/17 19:37:54	1.48
  @@ -2014,15 +2014,10 @@
    */
   API_EXPORT(long) ap_send_fd(ap_file_t *fd, request_rec *r)
   {
  -    long len;
  +    long len = r->finfo.size;
   #ifdef HAVE_SENDFILE
       if (!r->chunked) {
           ap_bflush(r->connection->client);
  -        if (ap_get_filesize(&len, fd) != APR_SUCCESS) {
  -            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
  -                          "ap_send_fd: ap_get_filesize failed.");
  -            return 0;
  -        }
           if (iol_sendfile(r->connection->client->iol, fd, len,
                            NULL, 0, 0) != APR_SUCCESS) {
               ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
  
  
  
  1.12      +5 -0      apache-2.0/src/os/win32/os.h
  
  Index: os.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/os/win32/os.h,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- os.h	1999/11/30 05:56:14	1.11
  +++ os.h	2000/01/17 19:37:55	1.12
  @@ -105,6 +105,7 @@
   #define HAVE_CANONICAL_FILENAME
   #define HAVE_DRIVE_LETTERS
   #define HAVE_SENDFILE
  +
   typedef int uid_t;
   typedef int gid_t;
   typedef int pid_t;
  @@ -138,9 +139,13 @@
   #ifndef S_ISDIR
   #define S_ISDIR(m) (((m) & S_IFDIR) == S_IFDIR)
   #endif
  +
  +#if 0
   #ifndef S_ISREG
   #define S_ISREG(m)      (((m)&(S_IFREG)) == (S_IFREG))
   #endif
  +#endif
  +
   #define STDIN_FILENO  0
   #define STDOUT_FILENO 1
   #define STDERR_FILENO 2