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)