78 SHP_CVSID(
"$Id: safileio.c,v 1.6 2018-06-15 19:56:32 erouault Exp $")
80 #ifdef SHPAPI_UTF8_HOOKS
82 #define WIN32_LEAN_AND_MEAN
85 #pragma comment(lib, "kernel32.lib")
96 return (
SAFile)fopen(pszFilename, pszAccess);
106 return (
SAOffset)fread(p, (
size_t)size, (
size_t)nmemb, (FILE *)
file);
116 return (
SAOffset)fwrite(p, (
size_t)size, (
size_t)nmemb, (FILE *)
file);
126 return (
SAOffset)fseek((FILE *)
file, (
long)offset, whence);
146 return fflush((FILE *)
file);
156 return fclose((FILE *)
file);
166 return remove(filename);
176 fprintf(stderr,
"%s\n", message);
196 psHooks->
Atof = atof;
199 #ifdef SHPAPI_WINDOWS
205 const wchar_t *Utf8ToWideChar(
const char *pszFilename)
208 wchar_t *pwszFileName;
210 nMulti = strlen(pszFilename) + 1;
211 nWide = MultiByteToWideChar(CP_UTF8, 0, pszFilename, nMulti, 0, 0);
215 pwszFileName = (
wchar_t *)
malloc(nWide *
sizeof(
wchar_t));
216 if (pwszFileName ==
NULL) {
219 if (MultiByteToWideChar(CP_UTF8, 0, pszFilename, nMulti, pwszFileName,
231 SAFile SAUtf8WFOpen(
const char *pszFilename,
const char *pszAccess)
234 const wchar_t *pwszFileName, *pwszAccess;
235 pwszFileName = Utf8ToWideChar(pszFilename);
236 pwszAccess = Utf8ToWideChar(pszAccess);
237 if (pwszFileName !=
NULL && pwszAccess !=
NULL) {
238 file = (
SAFile)_wfopen(pwszFileName, pwszAccess);
240 free((
wchar_t *)pwszFileName);
241 free((
wchar_t *)pwszAccess);
249 int SAUtf8WRemove(
const char *pszFilename)
251 const wchar_t *pwszFileName = Utf8ToWideChar(pszFilename);
253 if (pwszFileName !=
NULL) {
254 rc = _wremove(pwszFileName);
256 free((
wchar_t *)pwszFileName);
262 #ifdef SHPAPI_UTF8_HOOKS
268 void SASetupUtf8Hooks(
SAHooks *psHooks)
270 #ifdef SHPAPI_WINDOWS
271 psHooks->
FOpen = SAUtf8WFOpen;
272 psHooks->
Remove = SAUtf8WRemove;
274 #error "no implementations of UTF-8 hooks available for this platform"
284 psHooks->
Atof = atof;
int SADFClose(SAFile file)
SAOffset SADFTell(SAFile file)
SAOffset SADFWrite(void *p, SAOffset size, SAOffset nmemb, SAFile file)
int SADRemove(const char *filename)
SAOffset SADFRead(void *p, SAOffset size, SAOffset nmemb, SAFile file)
SAFile SADFOpen(const char *pszFilename, const char *pszAccess)
void SASetupDefaultHooks(SAHooks *psHooks)
int SADFFlush(SAFile file)
SAOffset SADFSeek(SAFile file, SAOffset offset, int whence)
void SADError(const char *message)
#define SHP_CVSID(string)
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)