#define SDCCUTIL_H
#include "SDCChasht.h"
-
-/* PENDING: Hacks as I can't work autoconf */
-#define BINDIR PREFIX "/bin"
+#include <stdarg.h>
/** Given an array of name, value string pairs creates a new hash
containing all of the pairs.
*/
char *getPathDifference (char *pinto, const char *p1, const char *p2);
-/** Given a file with path information in the binary files directory,
- returns what PREFIX must be to get this path. Used for discovery
- of where SDCC is installed. Returns NULL if the path is
- impossible.
+/** Given an array of string pointers, returns a string containing all
+ of the strings seperated by spaces. The returned string is on the
+ heap. n is the number of strings in the list.
*/
-char *getPrefixFromBinPath (const char *prel);
+char *getBinPath (const char *prel);
/** Returns true if the given path exists.
*/
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.
*/
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