1/* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef FILE_IO_H 18#define FILE_IO_H 19 20#include "apr_private.h" 21#include "apr_general.h" 22#include "apr_thread_mutex.h" 23#include "apr_file_io.h" 24#include "apr_file_info.h" 25#include "apr_errno.h" 26#include "apr_poll.h" 27 28/* We have an implementation of mkstemp but it's not very multi-threading 29 * friendly & is part of the POSIX emulation rather than native so don't 30 * use it. 31 */ 32#undef HAVE_MKSTEMP 33 34#define APR_FILE_DEFAULT_BUFSIZE 4096 35#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE 36 37struct apr_file_t { 38 apr_pool_t *pool; 39 HFILE filedes; 40 char * fname; 41 int isopen; 42 int buffered; 43 int eof_hit; 44 apr_int32_t flags; 45 int timeout; 46 int pipe; 47 HEV pipeSem; 48 enum { BLK_UNKNOWN, BLK_OFF, BLK_ON } blocking; 49 50 /* Stuff for buffered mode */ 51 char *buffer; 52 apr_size_t bufsize; /* Read/Write position in buffer */ 53 apr_size_t bufpos; /* Read/Write position in buffer */ 54 unsigned long dataRead; /* amount of valid data read into buffer */ 55 int direction; /* buffer being used for 0 = read, 1 = write */ 56 unsigned long filePtr; /* position in file of handle */ 57 apr_thread_mutex_t *mutex; /* mutex semaphore, must be owned to access 58 the above fields */ 59}; 60 61struct apr_dir_t { 62 apr_pool_t *pool; 63 char *dirname; 64 ULONG handle; 65 FILEFINDBUF3 entry; 66 int validentry; 67}; 68 69apr_status_t apr_file_cleanup(void *); 70apr_status_t apr_os2_time_to_apr_time(apr_time_t *result, FDATE os2date, 71 FTIME os2time); 72apr_status_t apr_apr_time_to_os2_time(FDATE *os2date, FTIME *os2time, 73 apr_time_t aprtime); 74 75/* see win32/fileio.h for description of these */ 76extern const char c_is_fnchar[256]; 77 78#define IS_FNCHAR(c) c_is_fnchar[(unsigned char)c] 79 80apr_status_t filepath_root_test(char *path, apr_pool_t *p); 81apr_status_t filepath_drive_get(char **rootpath, char drive, 82 apr_int32_t flags, apr_pool_t *p); 83apr_status_t filepath_root_case(char **rootpath, char *root, apr_pool_t *p); 84 85#endif /* ! FILE_IO_H */ 86 87