1 extern int pval; 2 3 4 extern size_t strlcpy(char *dst, const char *src, size_t size); 5 extern size_t strlcat(char *dst, const char *src, size_t size); 6 #if DEBUG >= 1 7 extern size_t strlcpyd(char *dst, const char *src, size_t size); 8 extern size_t strlcatd(char *dst, const char *src, size_t size); 9 #endif 10 11 extern int ErrOut(const char Mode, const char *func, const char *fmt, ...); 12 extern void SAshow(const char *fmt, ...); 13 extern void SAsystem(const char *program, ...); 14 extern void *SAmalloc(size_t size); 15 extern char SAinet_pton(const char *src, in_addr_t *dst); 16 extern char *SAinet_ntop(in_addr_t *src); 17 extern void *SArealloc(void *ptr, size_t size); 18 extern char *SAstrdup(const char *src); 19 extern char *SAstrldup(const char *src, size_t size); 20 extern int SApstrcmp(const char **el1, const char **el2); 21 extern char *SAsetlocale(int category, const char *locale); 22 extern time_t SAmktime(struct tm *tm); 23 extern time_t SAtime(time_t *tloc); 24 extern struct tm *SAlocaltime(const time_t *timep); 25 26 27 #if DEBUG >= 1 28 #define SAstrlcpy strlcpyd 29 #define SAstrlcat strlcatd 30 #else 31 #define SAstrlcpy strlcpy 32 #define SAstrlcat strlcat 33 #endif 34 35 #define SAbzero(s, n) memset((void *)s, 0, n) 36 37 #define SAwarning(...) ErrOut(2, __SAINFO__, __VA_ARGS__) 38 #define SAdebug(...) ErrOut(1, __SAINFO__, __VA_ARGS__) 39 #define SAexit(...) ErrOut(0, __SAINFO__, __VA_ARGS__) 40 41 #define SAfprintf(...) ( ((pval = fprintf(__VA_ARGS__)) < 0) ? SAexit("") : pval ) 42 #define SAvfprintf(...) ( ((pval = vfprintf(__VA_ARGS__)) < 0) ? SAexit("") : pval ) 43 #define SAsnprintf(...) ( ((pval = snprintf(__VA_ARGS__)) < 0) ? SAexit("") : pval ) 44 #define SAvsnprintf(...) ( ((pval = vsnprintf(__VA_ARGS__)) < 0) ? SAexit("") : pval ) 45 46 #if DEBUG >= 1 47 #define SDEBUG() SAdebug("Entering") 48 #define EDEBUG() SAdebug("Exiting") 49 #else 50 #define SDEBUG() 51 #define EDEBUG() 52 #endif 53