X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCutil.h;h=5a635391833f7dbcf1b522d0efbbe7f1a1a75221;hb=df203a96d87ea3322e836e3dd980f64b80b234e7;hp=e312256ca7d8cd96dd3fd92796a193e2a2320a69;hpb=aa6378f25140b326869cef07183b196d9548ee23;p=fw%2Fsdcc diff --git a/src/SDCCutil.h b/src/SDCCutil.h index e312256c..5a635391 100644 --- a/src/SDCCutil.h +++ b/src/SDCCutil.h @@ -26,6 +26,7 @@ #define SDCCUTIL_H #include "SDCChasht.h" +#include /* PENDING: Hacks as I can't work autoconf */ #define BINDIR PREFIX "/bin" @@ -74,7 +75,7 @@ void setMainValue (const char *pname, const char *pvalue); void populateMainValues (const char **ppin); -void buildCmdLine2 (char *pbuffer, const char *pcmd); +void buildCmdLine2 (char *pbuffer, const char *pcmd, size_t len); /** Returns true if sz starts with the string given in key. */ @@ -88,5 +89,40 @@ void chomp (char *sz); hTab * getRuntimeVariables(void); +/* strncpy() with guaranteed NULL termination. */ +char *strncpyz(char *dest, const char *src, size_t n); + +/* like strncat() with guaranteed NULL termination + * The passed size should be the size of the dest buffer, not the number of + * bytes to copy. + */ +char *strncatz(char *dest, const char *src, size_t n); + +/* snprintf, by hook or by crook. */ +size_t SDCCsnprintf(char *, size_t, const char *, ...); + +# if defined(HAVE_VSNPRINTF) + +// best option: we can define our own snprintf which logs errors. +# define SNPRINTF SDCCsnprintf + +# elif defined(HAVE_SPRINTF) + +// if we can't build a safe snprintf for lack of vsnprintf but there +// is a native snprintf, use it. +# define SNPRINTF snprintf + +# elif defined(HAVE_VSPRINTF) + +// we can at least define our own unsafe version. +# define SNPRINTF SDCCsnprintf + +# else +// We don't have a native snprintf nor the functions we need to write one. +# error "Need at least one of snprintf, vsnprintf, vsprintf!" +# endif + + + #endif