1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** Macros to do save string operations to avoid buffer overflows. **
10 \*****************************************************************************/
13 /* save strcpy/strncpy */
15 #define SCPY(dst, src) scpy(dst, src, sizeof(dst))
16 extern __inline__ void scpy(char *dst, char *src, unsigned int siz)
18 strncpy(dst, src, siz);
22 /* save strcat/strncat */
24 #define SCAT(dst, src) scat(dst, src, sizeof(dst))
25 extern __inline__ void scat(char *dst, char *src, unsigned int siz)
27 strncat(dst, src, siz);
31 /* save concat of a byte */
33 #define SCCAT(dst, src) sccat(dst, src, sizeof(dst))
34 extern __inline__ void sccat(char *dst, char chr, unsigned int siz)
36 if (strlen(dst) < siz-1)
38 dst[strlen(dst)+1] = '\0';
39 dst[strlen(dst)] = chr;
43 /* save sprintf/snprintf */
45 #define SPRINT(dst, fmt, arg...) sprint(dst, sizeof(dst), fmt, ## arg)
46 extern __inline__ void sprint(char *dst, unsigned int siz, char *fmt, ...)
51 vsnprintf(dst, siz, fmt, args);
61 #define UPRINT sprintf
62 #define UNPRINT snprintf
63 #define VUNPRINT vsnprintf