GRASS 8 Programmer's Manual 8.6.0dev(2026)-f6f2c534ea
Loading...
Searching...
No Matches
safileio.c
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Project: Shapelib
4 * Purpose: Default implementation of file io based on stdio.
5 * Author: Frank Warmerdam, warmerdam@pobox.com
6 *
7 ******************************************************************************
8 * Copyright (c) 2007, Frank Warmerdam
9 * Copyright (c) 2016-2024, Even Rouault <even dot rouault at spatialys.com>
10 *
11 * SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
12 ******************************************************************************
13 *
14 */
15
16#include "shapefil_private.h"
17
18#include <assert.h>
19#include <math.h>
20#include <limits.h>
21#include <stdio.h>
22#include <stdlib.h>
23#include <string.h>
24
25#ifdef SHPAPI_UTF8_HOOKS
26#ifdef SHPAPI_WINDOWS
27#define WIN32_LEAN_AND_MEAN
28#define NOMINMAX
29#include <windows.h>
30#pragma comment(lib, "kernel32.lib")
31#endif
32#endif
33
34static SAFile SADFOpen(const char *pszFilename, const char *pszAccess,
35 void *pvUserData)
36{
37 (void)pvUserData;
39}
40
41static SAOffset SADFRead(void *p, SAOffset size, SAOffset nmemb, SAFile file)
42{
43 return (SAOffset)fread(p, (size_t)size, (size_t)nmemb, (FILE *)file);
44}
45
46static SAOffset SADFWrite(const void *p, SAOffset size, SAOffset nmemb,
48{
49 return (SAOffset)fwrite(p, (size_t)size, (size_t)nmemb, (FILE *)file);
50}
51
52static SAOffset SADFSeek(SAFile file, SAOffset offset, int whence)
53{
54#if defined(_MSC_VER) && _MSC_VER >= 1400
55 return (SAOffset)_fseeki64((FILE *)file, (__int64)offset, whence);
56#else
57 return (SAOffset)fseek((FILE *)file, (long)offset, whence);
58#endif
59}
60
61static SAOffset SADFTell(SAFile file)
62{
63#if defined(_MSC_VER) && _MSC_VER >= 1400
64 return (SAOffset)_ftelli64((FILE *)file);
65#else
66 return (SAOffset)ftell((FILE *)file);
67#endif
68}
69
70static int SADFFlush(SAFile file)
71{
72 return fflush((FILE *)file);
73}
74
75static int SADFClose(SAFile file)
76{
77 return fclose((FILE *)file);
78}
79
80static int SADRemove(const char *filename, void *pvUserData)
81{
82 (void)pvUserData;
83 return remove(filename);
84}
85
86static void SADError(const char *message)
87{
88 fprintf(stderr, "%s\n", message);
89}
90
92{
93 psHooks->FOpen = SADFOpen;
94 psHooks->FRead = SADFRead;
95 psHooks->FWrite = SADFWrite;
96 psHooks->FSeek = SADFSeek;
97 psHooks->FTell = SADFTell;
98 psHooks->FFlush = SADFFlush;
99 psHooks->FClose = SADFClose;
100 psHooks->Remove = SADRemove;
101
102 psHooks->Error = SADError;
103 psHooks->Atof = atof;
104 psHooks->pvUserData = SHPLIB_NULLPTR;
105}
106
107#ifdef SHPAPI_WINDOWS
108
109static wchar_t *Utf8ToWideChar(const char *pszFilename)
110{
111 const int nMulti = (int)strlen(pszFilename) + 1;
112 const int nWide =
114 if (nWide == 0) {
115 return NULL;
116 }
117 wchar_t *pwszFileName = (wchar_t *)malloc(nWide * sizeof(wchar_t));
118 if (pwszFileName == NULL) {
119 return NULL;
120 }
122 nWide) == 0) {
124 return NULL;
125 }
126 return pwszFileName;
127}
128
129/************************************************************************/
130/* SAUtf8WFOpen */
131/************************************************************************/
132
133static SAFile SAUtf8WFOpen(const char *pszFilename, const char *pszAccess,
134 void *pvUserData)
135{
136 (void)pvUserData;
137 SAFile file = NULL;
140 if (pwszFileName != NULL && pwszAccess != NULL) {
142 }
145 return file;
146}
147
148static int SAUtf8WRemove(const char *pszFilename, void *pvUserData)
149{
150 (void)pvUserData;
152 int rc = -1;
153 if (pwszFileName != NULL) {
155 }
157 return rc;
158}
159
160#endif
161
162#ifdef SHPAPI_UTF8_HOOKS
163#ifndef SHPAPI_WINDOWS
164#error "no implementations of UTF-8 hooks available for this platform"
165#endif
166
168{
169 psHooks->FOpen = SAUtf8WFOpen;
170 psHooks->Remove = SAUtf8WRemove;
171 psHooks->FRead = SADFRead;
172 psHooks->FWrite = SADFWrite;
173 psHooks->FSeek = SADFSeek;
174 psHooks->FTell = SADFTell;
175 psHooks->FFlush = SADFFlush;
176 psHooks->FClose = SADFClose;
177
178 psHooks->Error = SADError;
179 psHooks->Atof = atof;
180 psHooks->pvUserData = SHPLIB_NULLPTR;
181}
182#endif
#define NULL
Definition ccmath.h:32
#define file
void SASetupDefaultHooks(SAHooks *psHooks)
Definition safileio.c:91
int * SAFile
Definition shapefil.h:125
#define SHPLIB_NULLPTR
void * malloc(unsigned)
void free(void *)