79 #ifdef SHPAPI_UTF8_HOOKS
80 # ifdef SHPAPI_WINDOWS
81 # define WIN32_LEAN_AND_MEAN
84 # pragma comment(lib, "kernel32.lib")
96 return (
SAFile) fopen( pszFilename, pszAccess );
107 return (
SAOffset) fread( p, (
size_t) size, (
size_t) nmemb,
119 if (!nmemb || !p)
return 0;
120 return (
SAOffset) fwrite( p, (
size_t) size, (
size_t) nmemb,
132 return (
SAOffset) fseek( (FILE *) file, (
long) offset, whence );
143 return (
SAOffset) ftell( (FILE *) file );
154 return fflush( (FILE *) file );
165 return fclose( (FILE *) file );
176 return remove( filename );
187 fprintf( stderr,
"%s\n", message );
207 psHooks->
Atof = atof;
213 #ifdef SHPAPI_WINDOWS
219 const wchar_t* Utf8ToWideChar(
const char *pszFilename )
222 wchar_t *pwszFileName;
224 nMulti = strlen(pszFilename) + 1;
225 nWide = MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, 0, 0);
230 pwszFileName = (
wchar_t*)
malloc(nWide *
sizeof(
wchar_t));
231 if ( pwszFileName == NULL )
235 if( MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, pwszFileName, nWide ) == 0 )
237 free( pwszFileName );
247 SAFile SAUtf8WFOpen(
const char *pszFilename,
const char *pszAccess )
250 const wchar_t *pwszFileName, *pwszAccess;
251 pwszFileName = Utf8ToWideChar( pszFilename );
252 pwszAccess = Utf8ToWideChar( pszAccess );
253 if( pwszFileName != NULL && pwszAccess != NULL)
255 file = (
SAFile) _wfopen( pwszFileName, pwszAccess );
257 free ((
wchar_t*) pwszFileName);
258 free ((
wchar_t*) pwszAccess);
266 int SAUtf8WRemove(
const char *pszFilename )
268 const wchar_t *pwszFileName = Utf8ToWideChar( pszFilename );
270 if( pwszFileName != NULL )
272 rc = _wremove( pwszFileName );
274 free ((
wchar_t*) pwszFileName);
280 #ifdef SHPAPI_UTF8_HOOKS
286 void SASetupUtf8Hooks(
SAHooks *psHooks )
288 #ifdef SHPAPI_WINDOWS
289 psHooks->
FOpen = SAUtf8WFOpen;
290 psHooks->
Remove = SAUtf8WRemove;
292 # error "no implementations of UTF-8 hooks available for this platform"
302 psHooks->
Atof = atof;
static SAOffset SADFWrite(void *p, SAOffset size, SAOffset nmemb, SAFile file)
static SAOffset SADFSeek(SAFile file, SAOffset offset, int whence)
static SAFile SADFOpen(const char *pszFilename, const char *pszAccess)
static int SADFClose(SAFile file)
static void SADError(const char *message)
static int SADRemove(const char *filename)
void SASetupDefaultHooks(SAHooks *psHooks)
static SAOffset SADFTell(SAFile file)
static int SADFFlush(SAFile file)
static SAOffset SADFRead(void *p, SAOffset size, SAOffset nmemb, SAFile file)
void(* Error)(const char *message)
SAFile(* FOpen)(const char *filename, const char *access)
SAOffset(* FTell)(SAFile file)
int(* FFlush)(SAFile file)
SAOffset(* FWrite)(void *p, SAOffset size, SAOffset nmemb, SAFile file)
double(* Atof)(const char *str)
int(* Remove)(const char *filename)
int(* FClose)(SAFile file)
SAOffset(* FRead)(void *p, SAOffset size, SAOffset nmemb, SAFile file)
SAOffset(* FSeek)(SAFile file, SAOffset offset, int whence)