31 #ifndef CPL_VSI_H_INCLUDED
32 #define CPL_VSI_H_INCLUDED
59 #if !defined(_WIN32) && !defined(_WIN32_WCE)
64 #if !defined(macos_pre10) && !defined(_WIN32_WCE)
65 # include <sys/stat.h>
69 #if defined(_WIN32_WCE)
70 # include <wce_stat.h>
81 FILE CPL_DLL * VSIFOpen(
const char *,
const char * ) CPL_WARN_UNUSED_RESULT;
82 int CPL_DLL VSIFClose( FILE * );
83 int CPL_DLL VSIFSeek( FILE *,
long,
int );
84 long CPL_DLL VSIFTell( FILE * );
85 void CPL_DLL VSIRewind( FILE * );
86 void CPL_DLL VSIFFlush( FILE * );
88 size_t CPL_DLL VSIFRead(
void *,
size_t,
size_t, FILE * );
89 size_t CPL_DLL VSIFWrite( const
void *,
size_t,
size_t, FILE * );
90 char CPL_DLL *VSIFGets(
char *,
int, FILE * );
91 int CPL_DLL VSIFPuts( const
char *, FILE * );
92 int CPL_DLL VSIFPrintf( FILE *, const
char *, ... ) CPL_PRINT_FUNC_FORMAT(2, 3);
94 int CPL_DLL VSIFGetc( FILE * );
95 int CPL_DLL VSIFPutc(
int, FILE * );
96 int CPL_DLL VSIUngetc(
int, FILE * );
97 int CPL_DLL VSIFEof( FILE * );
103 typedef struct stat VSIStatBuf;
104 int CPL_DLL VSIStat( const
char *, VSIStatBuf * );
107 # define VSI_ISLNK(x) ( 0 )
108 # define VSI_ISREG(x) ((x) & S_IFREG)
109 # define VSI_ISDIR(x) ((x) & S_IFDIR)
110 # define VSI_ISCHR(x) ((x) & S_IFCHR)
111 # define VSI_ISBLK(x) ( 0 )
113 # define VSI_ISLNK(x) S_ISLNK(x)
114 # define VSI_ISREG(x) S_ISREG(x)
115 # define VSI_ISDIR(x) S_ISDIR(x)
116 # define VSI_ISCHR(x) S_ISCHR(x)
117 # define VSI_ISBLK(x) S_ISBLK(x)
125 typedef GUIntBig vsi_l_offset;
129 #define VSIL_STRICT_ENFORCE
132 #ifdef VSIL_STRICT_ENFORCE
133 typedef struct _VSILFILE VSILFILE;
135 typedef FILE VSILFILE;
138 VSILFILE CPL_DLL *
VSIFOpenL(
const char *,
const char * ) CPL_WARN_UNUSED_RESULT;
139 int CPL_DLL VSIFCloseL( VSILFILE * );
140 int CPL_DLL VSIFSeekL( VSILFILE *, vsi_l_offset,
int );
141 vsi_l_offset CPL_DLL VSIFTellL( VSILFILE * );
142 void CPL_DLL VSIRewindL( VSILFILE * );
143 size_t CPL_DLL VSIFReadL(
void *,
size_t,
size_t, VSILFILE * );
144 int CPL_DLL VSIFReadMultiRangeL(
int nRanges,
void ** ppData, const vsi_l_offset* panOffsets, const
size_t* panSizes, VSILFILE * );
145 size_t CPL_DLL VSIFWriteL( const
void *,
size_t,
size_t, VSILFILE * );
146 int CPL_DLL VSIFEofL( VSILFILE * );
147 int CPL_DLL VSIFTruncateL( VSILFILE *, vsi_l_offset );
148 int CPL_DLL VSIFFlushL( VSILFILE * );
149 int CPL_DLL VSIFPrintfL( VSILFILE *, const
char *, ... ) CPL_PRINT_FUNC_FORMAT(2, 3);
150 int CPL_DLL VSIFPutcL(
int, VSILFILE * );
152 #if defined(VSI_STAT64_T)
153 typedef struct VSI_STAT64_T VSIStatBufL;
155 #define VSIStatBufL VSIStatBuf
158 int CPL_DLL
VSIStatL(
const char *, VSIStatBufL * );
160 #define VSI_STAT_EXISTS_FLAG 0x1
161 #define VSI_STAT_NATURE_FLAG 0x2
162 #define VSI_STAT_SIZE_FLAG 0x4
164 int CPL_DLL
VSIStatExL(
const char * pszFilename, VSIStatBufL * psStatBuf,
int nFlags );
172 void CPL_DLL *VSICalloc(
size_t,
size_t ) CPL_WARN_UNUSED_RESULT;
173 void CPL_DLL *VSIMalloc(
size_t ) CPL_WARN_UNUSED_RESULT;
174 void CPL_DLL VSIFree(
void * );
175 void CPL_DLL *VSIRealloc(
void *,
size_t ) CPL_WARN_UNUSED_RESULT;
176 char CPL_DLL *VSIStrdup( const
char * ) CPL_WARN_UNUSED_RESULT;
185 void CPL_DLL *VSIMalloc2(
size_t nSize1,
size_t nSize2 ) CPL_WARN_UNUSED_RESULT;
194 void CPL_DLL *VSIMalloc3(
size_t nSize1,
size_t nSize2,
size_t nSize3 ) CPL_WARN_UNUSED_RESULT;
201 #define CPLReadDir VSIReadDir
203 int CPL_DLL
VSIMkdir(
const char * pathname,
long mode );
204 int CPL_DLL
VSIRmdir(
const char * pathname );
205 int CPL_DLL
VSIUnlink(
const char * pathname );
206 int CPL_DLL
VSIRename(
const char * oldpath,
const char * newpath );
207 char CPL_DLL *VSIStrerror(
int );
213 void CPL_DLL VSIInstallLargeFileHandler(
void);
222 void CPL_DLL VSICleanupFileManager(
void);
226 vsi_l_offset nDataLength,
227 int bTakeOwnership );
229 vsi_l_offset *pnDataLength,
230 int bUnlinkAndSeize );
236 unsigned long CPL_DLL VSITime(
unsigned long * );
237 const char CPL_DLL *VSICTime(
unsigned long );
238 struct tm CPL_DLL *VSIGMTime(
const time_t *pnTime,
239 struct tm *poBrokenTime );
240 struct tm CPL_DLL *VSILocalTime(
const time_t *pnTime,
241 struct tm *poBrokenTime );
255 #define VSIDebug4(f,a1,a2,a3,a4) CPLDebug( "VSI", f, a1, a2, a3, a4 );
256 #define VSIDebug3( f, a1, a2, a3 ) CPLDebug( "VSI", f, a1, a2, a3 );
257 #define VSIDebug2( f, a1, a2 ) CPLDebug( "VSI", f, a1, a2 );
258 #define VSIDebug1( f, a1 ) CPLDebug( "VSI", f, a1 );
260 #define VSIDebug4( f, a1, a2, a3, a4 ) {}
261 #define VSIDebug3( f, a1, a2, a3 ) {}
262 #define VSIDebug2( f, a1, a2 ) {}
263 #define VSIDebug1( f, a1 ) {}