@@ -67,6 +67,15 @@ extern "C" {
6767#include <process.h>
6868#include <time.h>
6969#include <libxml/xmlmemory.h>
70+
71+ #define arch_safe_free (memobject ) \
72+ do { \
73+ if(memobject) \
74+ { \
75+ free(memobject); \
76+ memobject = NULL; \
77+ } \
78+ }while(0)
7079
7180 inline void arch_strcpy_limited (char * dest , const char * src , int count )
7281 {
@@ -81,12 +90,6 @@ extern "C" {
8190 }
8291 }
8392
84- inline void arch_safe_free (void * ptr )
85- {
86- if (!ptr ) return ;
87- free (ptr );
88- ptr = NULL ;
89- }
9093
9194
9295#ifdef _MSC_VER
@@ -105,99 +108,44 @@ extern "C" {
105108#define INVALID_KEY UINT_MAX
106109
107110
108- inline int arch_vsprintf (char * buffer , size_t bufferCount , const char * fmt , ...)
109- {
110- va_list args ;
111- va_start (args , fmt );
112- int res = vsprintf_s (buffer , bufferCount , fmt , args );
113- va_end (args );
114- return res ;
115- }
111+ #define arch_vsprintf (buffer ,bufferCount , fmt , ...) vsprintf_s((buffer), (bufferCount), (fmt), __VA_ARGS__)
116112
117- inline int arch_vsprintf_auto (char * buffer , const char * fmt , ...)
118- {
119- va_list args ;
120- va_start (args , fmt );
121- int res = arch_vsprintf (buffer , sizeof (buffer ), fmt , args );
122- va_end (args );
123- return res ;
124- }
113+ #define arch_sprintf (buffer , bufferCount , fmt , ...) sprintf_s((buffer), (bufferCount), (fmt), __VA_ARGS__)
125114
115+ #define arch_sscanf ( buffer , fmt , ...) sscanf_s((buffer),(fmt), __VA_ARGS__)
116+
117+ #define arch_open (pFileDescriptor ,pFileName , openFlag ,shareFlag , permission ) _sopen_s(pFileDescriptor, pFileName, openFlag, shareFlag, permission);
118+
119+ #define arch_fopen (file , mode , file_ptr ) fopen_s(&(file_ptr), file, mode)
120+
121+ #define arch_ctime (buffer , timeptr ) ctime_s(buffer, sizeof(buffer), timeptr)
122+
123+ #define arch_getenv ( buffer , varname ) do { size_t len; _dupenv_s(&(buffer), &(len), varname); } while (0)
126124
127- inline int arch_sscanf (char * buffer , const char * fmt , ...)
128- {
129- va_list args ;
130- va_start (args , fmt );
131- int res = sscanf_s (buffer , fmt , args );
132- va_end (args );
133- return res ;
134- }
135125
136126 inline void arch_strcpy (char * dest , size_t bufferCount , const char * src )
137127 {
138128 strcpy_s (dest , bufferCount , src );
139129 }
140130
141- inline void arch_strcpy_auto (char * dest , const char * src )
142- {
143- arch_strcpy (dest , sizeof (dest ), src );
144- }
145131
146132 inline void arch_strncpy (char * dest , const char * src , size_t sizeInBytes , size_t maxCount )
147133 {
148134 strncpy_s (dest , sizeInBytes , src , maxCount );
149135 }
150136
151- inline void arch_strncpy_auto (char * dest , const char * src , size_t destSize )
152- {
153- arch_strncpy (dest , src , destSize , destSize );
154- }
155137
156138 inline void arch_strcat (char * dest , size_t sizeInBytes , const char * src )
157139 {
158140 strcat_s (dest , sizeInBytes , src );
159141 }
160142
161143
162- inline void arch_strcat_auto (char * dest , const char * src )
163- {
164- arch_strcat (dest , sizeof (dest ), src );
165- }
166-
167-
168- inline int arch_sprintf (char * buffer , size_t bufferCount , const char * fmt , ...)
169- {
170- va_list args ;
171- va_start (args , fmt );
172- int res = sprintf_s (buffer , bufferCount , fmt , args );
173- va_end (args );
174- return res ;
175- }
176-
177- inline int arch_sprintf_auto (char * buffer , const char * fmt , ...)
178- {
179- va_list args ;
180- va_start (args , fmt );
181- int res = arch_sprintf (buffer , sizeof (buffer ), fmt , args );
182- va_end (args );
183- return res ;
184- }
185-
186- inline void arch_open (int * pFileDescriptor , char * pFileName , int openFlag , int shareFlag , int permission )
187- {
188- _sopen_s (pFileDescriptor , pFileName , openFlag , shareFlag , permission );
189- }
190-
191144 inline char * arch_strtok (char * string , const char * delimiter , char * * context )
192145 {
193146 return strtok_s (string , delimiter , context );
194147 }
195148
196- inline void arch_fopen (const char * file , const char * mode , FILE * filePtr )
197- {
198- fopen_s (& (filePtr ), file , mode );
199- }
200-
201149 inline int arch_unlink (const char * filename )
202150 {
203151 return _unlink (filename );
@@ -233,21 +181,11 @@ extern "C" {
233181 return _getpid ();
234182 }
235183
236- inline void arch_getenv (char * buffer , const char * varname )
237- {
238- size_t len ;
239- _dupenv_s (& (buffer ), & (len ), varname );
240- }
241-
242184 inline int arch_access (const char * filename , int mode )
243185 {
244186 return _access (filename , mode );
245187 }
246188
247- inline void arch_ctime (char * const buffer , const time_t * timeptr )
248- {
249- ctime_s (buffer , sizeof (buffer ), timeptr );
250- }
251189
252190 inline void arch_xmlfree (void * ptr )
253191 {
@@ -264,87 +202,41 @@ extern "C" {
264202#define PERMISSION_WRITE 0222
265203#define INVALID_KEY (-1U)
266204
267- inline int arch_vsprintf (char * buffer , size_t unused , const char * fmt , ...)
268- {
269- va_list args ;
270- va_start (args , fmt );
271- int res = vsprintf (buffer , fmt , args );
272- va_end (args );
273- return res ;
274- }
205+ #define arch_vsprintf (buffer ,unused , fmt , ...) vsprintf((buffer), (fmt), __VA_ARGS__)
206+
207+ #define arch_sprintf (buffer ,unused , fmt , ...) sprintf((buffer), (fmt), __VA_ARGS__)
208+
209+ #define arch_sscanf ( buffer , fmt , ...) sscanf((buffer),(fmt), __VA_ARGS__)
210+
211+ #define arch_open ( pFileDescriptor , pFileName , openFlag , shareFlag , unused ) do{ *pFileDescriptor = open(pFileName, openFlag, shareFlag); }while(0)
212+
213+ #define arch_fopen ( file , mode , filePtr ) do {filePtr = fopen(file, mode);}while(0)
214+
215+ #define arch_ctime (buffer ,timeptr ) do { buffer = ctime(timeptr); } while (0)
216+
217+ #define arch_getenv (buffer ,varname ) do { buffer = getenv(varname); } while (0)
275218
276- inline int arch_vsprintf_auto (char * buffer , const char * fmt , ...)
277- {
278- va_list args ;
279- va_start (args , fmt );
280- int res = arch_sprintf (buffer , 0 , fmt , args );
281- va_end (args );
282- return res ;
283- }
284219
285- inline int arch_sscanf (char * buffer , const char * fmt , ...)
286- {
287- va_list args ;
288- va_start (args , fmt );
289- int res = sscanf (buffer , fmt , args );
290- va_end (args );
291- return res ;
292- }
293220 inline void arch_strcpy (char * dest , size_t unused , const char * src )
294221 {
295222 strcpy (dest , src );
296223 }
297224
298- inline void arch_strcpy_auto (char * dest , const char * src )
299- {
300- arch_strcpy (dest , 0 , src );
301- }
302-
303225 inline void arch_strncpy (char * dest , const char * src , size_t unused , size_t count )
304226 {
305227 strncpy (dest , src , count );
306228 }
307229
308- inline void arch_strncpy_auto (char * dest , const char * src , size_t destSize )
309- {
310- arch_strncpy (dest , src , destSize , 0 );
311- }
312-
313230 inline void arch_strcat (char * dest , size_t unused , const char * src )
314231 {
315232 strcat (dest , src );
316233 }
317234
318- inline void arch_strcat_auto (char * dest , const char * src )
319- {
320- arch_strcat (dest , 0 , src );
321- }
322-
323-
324- inline int arch_sprintf (char * buffer , size_t unused , const char * fmt , ...)
325- {
326- va_list args ;
327- va_start (args , fmt );
328- int res = sprintf (buffer , fmt , args );
329- va_end (args );
330- return res ;
331- }
332-
333- inline void arch_open (int * pFileDescriptor , char * pFileName , int openFlag , int shareFlag , int unused )
334- {
335- * pFileDescriptor = open (pFileName , openFlag , shareFlag );
336- }
337-
338235 inline char * arch_strtok (char * string , const char * delimiter , char * * unused )
339236 {
340237 return strtok (string , delimiter );
341238 }
342239
343- inline void arch_fopen (const char * file , const char * mode , FILE * filePtr )
344- {
345- filePtr = fopen (file , mode );
346- }
347-
348240 inline int arch_unlink (const char * filename )
349241 {
350242 return unlink (filename );
@@ -380,21 +272,11 @@ extern "C" {
380272 return getpid ();
381273 }
382274
383-
384- inline void arch_getenv (char * buffer , const char * varname )
385- {
386- buffer = getenv (varname );
387- }
388-
389275 inline int arch_access (const char * filename , int mode )
390276 {
391277 return access (filename , mode );
392278 }
393-
394- inline void arch_ctime (char * const buffer , const time_t * timeptr )
395- {
396- ctime_r (buffer , timeptr );
397- }
279+
398280
399281 inline void arch_xmlfree (void * ptr )
400282 {
@@ -403,6 +285,16 @@ extern "C" {
403285
404286#endif /* _MSC_VER */
405287
288+ /* These needs to be declared at the end to avoid redefinition and to avoid code replication */
289+ #define arch_vsprintf_auto ( buffer , fmt , ...) arch_vsprintf(buffer,sizeof(buffer),fmt,__VA_ARGS__)
290+
291+ #define arch_strcpy_auto (dest , src ) arch_strcpy(dest, sizeof(dest), src);
292+
293+ #define arch_strncpy_auto (dest , src , destSize ) arch_strncpy(dest, src, destSize, destSize);
294+
295+ #define arch_strcat_auto (dest ,src ) arch_strcat(dest, sizeof(dest), src);
296+
297+ #define arch_sprintf_auto (buffer , fmt , ...) arch_sprintf(buffer,sizeof(buffer),fmt, __VA_ARGS__)
406298
407299#ifdef __cplusplus
408300}
0 commit comments