sbgInterfaceFile.c
Go to the documentation of this file.
1 #include "sbgInterfaceFile.h"
2 
3 //----------------------------------------------------------------------//
4 //- Internal methods declarations -//
5 //----------------------------------------------------------------------//
6 
7 //----------------------------------------------------------------------//
8 //- Operations methods declarations -//
9 //----------------------------------------------------------------------//
10 
17 SbgErrorCode sbgInterfaceFileOpen(SbgInterface *pHandle, const char *filePath)
18 {
19  SbgErrorCode errorCode = SBG_NO_ERROR;
20  FILE *pInputFile;
21 
22  //
23  // Test input arguments
24  //
25  SBG_ASSERT(pHandle);
26  SBG_ASSERT(filePath);
27 
28  //
29  // First, initialize the interface handle to zero
30  //
31  sbgInterfaceZeroInit(pHandle);
32 
33  //
34  // Try to open the file
35  //
36  pInputFile = fopen(filePath, "rb");
37 
38  //
39  // Test if the input file has been opened
40  //
41  if (pInputFile)
42  {
43  //
44  // Define the interface members
45  //
46  pHandle->handle = pInputFile;
47  pHandle->type = SBG_IF_TYPE_FILE;
50  }
51  else
52  {
53  //
54  // Unable to open the input file
55  //
56  errorCode = SBG_INVALID_PARAMETER;
57  }
58 
59  return errorCode;
60 }
61 
68 SbgErrorCode sbgInterfaceFileWriteOpen(SbgInterface *pHandle, const char *filePath)
69 {
70  SbgErrorCode errorCode = SBG_NO_ERROR;
71  FILE *pInputFile;
72 
73  //
74  // Test input arguments
75  //
76  SBG_ASSERT(pHandle);
77  SBG_ASSERT(filePath);
78 
79  //
80  // Try to open the file
81  //
82  pInputFile = fopen(filePath, "wb");
83 
84  //
85  // Test if the input file has been opened
86  //
87  if (pInputFile)
88  {
89  //
90  // Define the interface members
91  //
92  pHandle->handle = pInputFile;
93  pHandle->type = SBG_IF_TYPE_FILE;
96  }
97  else
98  {
99  //
100  // Unable to open the input file
101  //
102  errorCode = SBG_INVALID_PARAMETER;
103  }
104 
105  return errorCode;
106 }
107 
114 {
115  FILE *pInputFile;
116 
117  //
118  // Test input arguments
119  //
120  SBG_ASSERT(pHandle);
121 
122  //
123  // Get the internal FILE handle
124  //
125  pInputFile = (FILE*)(pHandle->handle);
126 
127  //
128  // Close the input file only if opened
129  //
130  if (pInputFile)
131  {
132  fclose(pInputFile);
133  pHandle->handle = NULL;
134  }
135 
136  return SBG_NO_ERROR;
137 }
138 
145 {
146  FILE *pInputFile;
147  long cursorPos;
148  long fileSize;
149 
150  //
151  // Test input arguments
152  //
153  SBG_ASSERT(pHandle);
154 
155  //
156  // Initialize the file size to 0 in case of error
157  //
158  fileSize = 0;
159 
160  //
161  // Get the internal FILE handle
162  //
163  pInputFile = (FILE*)(pHandle->handle);
164 
165  //
166  // Test if the file handle is valid
167  //
168  if (pInputFile)
169  {
170  //
171  // Compute the file size
172  //
173  cursorPos = ftell(pInputFile);
174  fseek(pInputFile, 0, SEEK_END);
175  fileSize = ftell(pInputFile);
176  fseek(pInputFile, cursorPos, SEEK_SET);
177  }
178 
179  return (size_t)fileSize;
180 }
181 
188 {
189  FILE *pInputFile;
190 
191  //
192  // Test input argument
193  //
194  SBG_ASSERT(pHandle);
195 
196  //
197  // Get the internal FILE handle
198  //
199  pInputFile = (FILE*)(pHandle->handle);
200 
201  //
202  // Test if the file handle is valid
203  //
204  if (pInputFile)
205  {
206  //
207  // Return the current cursor position
208  //
209  return (size_t)ftell(pInputFile);
210  }
211 
212  return 0;
213 }
214 
215 
216 //----------------------------------------------------------------------//
217 //- Internal interfaces write/read implementations -//
218 //----------------------------------------------------------------------//
219 
227 SbgErrorCode sbgInterfaceFileWrite(SbgInterface *pHandle, const void *pBuffer, size_t bytesToWrite)
228 {
229  FILE *pOutputFile;
230  size_t bytesWritten;
231 
232  //
233  // Test input argument
234  //
235  SBG_ASSERT(pHandle);
236  SBG_ASSERT(pBuffer);
237 
238  //
239  // Get the internal FILE handle
240  //
241  pOutputFile = (FILE*)(pHandle->handle);
242 
243  //
244  // Write as much bytes as we can
245  //
246  bytesWritten = fwrite(pBuffer, sizeof(uint8), bytesToWrite, pOutputFile);
247 
248  //
249  // Check if we could successfuly write our bytes
250  //
251  if (bytesWritten == bytesToWrite)
252  {
253 
254  return SBG_NO_ERROR;
255  }
256  else
257  {
258  return SBG_WRITE_ERROR;
259  }
260 }
261 
270 SbgErrorCode sbgInterfaceFileRead(SbgInterface *pHandle, void *pBuffer, size_t *pReadBytes, size_t bytesToRead)
271 {
272  FILE *pInputFile;
273 
274  //
275  // Test input argument
276  //
277  SBG_ASSERT(pHandle);
278  SBG_ASSERT(pBuffer);
279  SBG_ASSERT(pReadBytes);
280 
281  //
282  // Get the internal FILE handle
283  //
284  pInputFile = (FILE*)(pHandle->handle);
285 
286  //
287  // Read some bytes from the file
288  //
289  *pReadBytes = fread(pBuffer, sizeof(uint8), bytesToRead, pInputFile);
290 
291  return SBG_NO_ERROR;
292 }
293 
294 
302 SbgErrorCode sbgInterfaceFileWriteFake(SbgInterface *pHandle, const void *pBuffer, size_t bytesToWrite)
303 {
304  //
305  // Simply avoid warnings and return an error
306  //
307  SBG_UNUSED_PARAMETER(pHandle);
308  SBG_UNUSED_PARAMETER(pBuffer);
309  SBG_UNUSED_PARAMETER(bytesToWrite);
310 
311  return SBG_ERROR;
312 }
313 
322 SbgErrorCode sbgInterfaceFileReadFake(SbgInterface *pHandle, void *pBuffer, size_t *pReadBytes, size_t bytesToRead)
323 {
324  //
325  // Simply avoid warnings and return an error
326  //
327  SBG_UNUSED_PARAMETER(pHandle);
328  SBG_UNUSED_PARAMETER(pBuffer);
329  SBG_UNUSED_PARAMETER(pReadBytes);
330  SBG_UNUSED_PARAMETER(bytesToRead);
331 
332  return SBG_ERROR;
333 }
size_t sbgInterfaceFileGetCursor(const SbgInterface *pHandle)
SbgErrorCode sbgInterfaceFileRead(SbgInterface *pHandle, void *pBuffer, size_t *pReadBytes, size_t bytesToRead)
SbgErrorCode sbgInterfaceFileClose(SbgInterface *pHandle)
SbgErrorCode sbgInterfaceFileWriteOpen(SbgInterface *pHandle, const char *filePath)
SbgErrorCode sbgInterfaceFileOpen(SbgInterface *pHandle, const char *filePath)
SbgErrorCode sbgInterfaceFileWrite(SbgInterface *pHandle, const void *pBuffer, size_t bytesToWrite)
size_t sbgInterfaceFileGetSize(SbgInterface *pHandle)
SbgErrorCode sbgInterfaceFileWriteFake(SbgInterface *pHandle, const void *pBuffer, size_t bytesToWrite)
SbgInterfaceHandle handle
Definition: sbgInterface.h:105
SbgInterfaceReadFunc pReadFunc
Definition: sbgInterface.h:109
#define NULL
Definition: sbgDefines.h:43
#define SBG_UNUSED_PARAMETER(x)
Definition: sbgDefines.h:102
unsigned char uint8
Definition: sbgTypes.h:56
#define SBG_ASSERT(expression)
Definition: sbgDebug.h:52
SBG_INLINE void sbgInterfaceZeroInit(SbgInterface *pHandle)
Definition: sbgInterface.h:121
SbgErrorCode sbgInterfaceFileReadFake(SbgInterface *pHandle, void *pBuffer, size_t *pReadBytes, size_t bytesToRead)
SbgInterfaceType type
Definition: sbgInterface.h:106
SbgInterfaceWriteFunc pWriteFunc
Definition: sbgInterface.h:108
enum _SbgErrorCode SbgErrorCode
This file implements a file interface for read only operations.


sbg_driver
Author(s):
autogenerated on Sun Jan 27 2019 03:42:20