00001 /****************************************************************************** 00002 * Copyright (c) 1998, Frank Warmerdam 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a 00005 * copy of this software and associated documentation files (the "Software"), 00006 * to deal in the Software without restriction, including without limitation 00007 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00008 * and/or sell copies of the Software, and to permit persons to whom the 00009 * Software is furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included 00012 * in all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00015 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00017 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00019 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00020 * DEALINGS IN THE SOFTWARE. 00021 ****************************************************************************** 00022 * 00023 * cpl_vsi.h 00024 * 00025 * Include file defining the Virtual System Interface (VSI) functions. This 00026 * should normally be included by all translators using VSI functions for 00027 * accessing system services. It is also used by the GDAL core, and can be 00028 * used by higher level applications which adhere to VSI use. 00029 * 00030 * Most VSI functions are direct analogs of Posix C library functions. 00031 * VSI exists to allow ``hooking'' these functions to provide application 00032 * specific checking, io redirection and so on. 00033 * 00034 * $Log: cpl_vsi_h-source.html,v $ 00034 * Revision 1.5 2000/11/06 04:49:01 warmerda 00034 * *** empty log message *** 00034 * 00035 * Revision 1.6 2000/01/25 03:11:03 warmerda 00036 * added unlink and mkdir 00037 * 00038 * Revision 1.5 1999/05/23 02:43:57 warmerda 00039 * Added documentation block. 00040 * 00041 * Revision 1.4 1999/02/25 04:48:11 danmo 00042 * Added VSIStat() macros specific to _WIN32 (for MSVC++) 00043 * 00044 * Revision 1.3 1999/01/28 18:31:25 warmerda 00045 * Test on _WIN32 rather than WIN32. It seems to be more reliably defined. 00046 * 00047 * Revision 1.2 1998/12/04 21:42:57 danmo 00048 * Added #ifndef WIN32 arounf #include <unistd.h> 00049 * 00050 * Revision 1.1 1998/12/03 18:26:02 warmerda 00051 * New 00052 * 00053 */ 00054 00055 #ifndef CPL_VSI_H_INCLUDED 00056 #define CPL_VSI_H_INCLUDED 00057 00058 #include "cpl_port.h" 00078 /* -------------------------------------------------------------------- */ 00079 /* We need access to ``struct stat''. */ 00080 /* -------------------------------------------------------------------- */ 00081 #ifndef _WIN32 00082 # include <unistd.h> 00083 #endif 00084 #include <sys/stat.h> 00085 00086 CPL_C_START 00087 00088 /* ==================================================================== */ 00089 /* stdio file access functions. */ 00090 /* ==================================================================== */ 00091 00092 FILE CPL_DLL * VSIFOpen( const char *, const char * ); 00093 int CPL_DLL VSIFClose( FILE * ); 00094 int CPL_DLL VSIFSeek( FILE *, long, int ); 00095 long CPL_DLL VSIFTell( FILE * ); 00096 void CPL_DLL VSIRewind( FILE * ); 00097 00098 size_t CPL_DLL VSIFRead( void *, size_t, size_t, FILE * ); 00099 size_t CPL_DLL VSIFWrite( void *, size_t, size_t, FILE * ); 00100 char CPL_DLL *VSIFGets( char *, int, FILE * ); 00101 int CPL_DLL VSIFPuts( const char *, FILE * ); 00102 int CPL_DLL VSIFPrintf( FILE *, const char *, ... ); 00103 00104 int CPL_DLL VSIFGetc( FILE * ); 00105 int CPL_DLL VSIFPutc( int, FILE * ); 00106 int CPL_DLL VSIUngetc( int, FILE * ); 00107 int CPL_DLL VSIFEof( FILE * ); 00108 00109 /* ==================================================================== */ 00110 /* VSIStat() related. */ 00111 /* ==================================================================== */ 00112 00113 typedef struct stat VSIStatBuf; 00114 int CPL_DLL VSIStat( const char *, VSIStatBuf * ); 00115 00116 #ifdef _WIN32 00117 # define VSI_ISLNK(x) ( 0 ) /* N/A on Windows */ 00118 # define VSI_ISREG(x) ((x) & S_IFREG) 00119 # define VSI_ISDIR(x) ((x) & S_IFDIR) 00120 # define VSI_ISCHR(x) ((x) & S_IFCHR) 00121 # define VSI_ISBLK(x) ( 0 ) /* N/A on Windows */ 00122 #else 00123 # define VSI_ISLNK(x) S_ISLNK(x) 00124 # define VSI_ISREG(x) S_ISREG(x) 00125 # define VSI_ISDIR(x) S_ISDIR(x) 00126 # define VSI_ISCHR(x) S_ISCHR(x) 00127 # define VSI_ISBLK(x) S_ISBLK(x) 00128 #endif 00129 00130 /* ==================================================================== */ 00131 /* Memory allocation */ 00132 /* ==================================================================== */ 00133 00134 void CPL_DLL *VSICalloc( size_t, size_t ); 00135 void CPL_DLL *VSIMalloc( size_t ); 00136 void CPL_DLL VSIFree( void * ); 00137 void CPL_DLL *VSIRealloc( void *, size_t ); 00138 char CPL_DLL *VSIStrdup( const char * ); 00139 00140 /* ==================================================================== */ 00141 /* Other... */ 00142 /* ==================================================================== */ 00143 00144 int CPL_DLL VSIMkdir( const char * pathname, long mode ); 00145 int CPL_DLL VSIUnlink( const char * pathname ); 00146 00147 CPL_C_END 00148 00149 #endif /* ndef CPL_VSI_H_INCLUDED */