summaryrefslogtreecommitdiff
path: root/lib/str.c
diff options
context:
space:
mode:
authorpaul <paul>2002-12-13 20:15:29 +0000
committerpaul <paul>2002-12-13 20:15:29 +0000
commit718e3744195351130f4ce7dbe0613f4b3e23df93 (patch)
treebac2ad39971cd43f31241ef123bd4e470f695ac9 /lib/str.c
Initial revision
Diffstat (limited to 'lib/str.c')
-rw-r--r--lib/str.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/str.c b/lib/str.c
new file mode 100644
index 00000000..797e9b87
--- /dev/null
+++ b/lib/str.c
@@ -0,0 +1,62 @@
+/*
+ * zebra string function
+ *
+ * these functions are just very basic wrappers around exiting ones and
+ * do not offer the protection that might be expected against buffer
+ * overruns etc
+ */
+
+#include <zebra.h>
+
+#include "str.h"
+
+#ifndef HAVE_SNPRINTF
+/*
+ * snprint() is a real basic wrapper around the standard sprintf()
+ * without any bounds checking
+ */
+int
+snprintf(char *str, size_t size, const char *format, ...)
+{
+ va_list args;
+
+ va_start (args, format);
+
+ return vsprintf (str, format, args);
+}
+#endif
+
+#ifndef HAVE_STRLCPY
+/*
+ * strlcpy is a safer version of strncpy(), checking the total
+ * size of the buffer
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t size)
+{
+ strncpy(dst, src, size);
+
+ return (strlen(dst));
+}
+#endif
+
+#ifndef HAVE_STRLCAT
+/*
+ * strlcat is a safer version of strncat(), checking the total
+ * size of the buffer
+ */
+size_t
+strlcat(char *dst, const char *src, size_t size)
+{
+ /* strncpy(dst, src, size - strlen(dst)); */
+
+ /* I've just added below code only for workable under Linux. So
+ need rewrite -- Kunihiro. */
+ if (strlen (dst) + strlen (src) >= size)
+ return -1;
+
+ strcat (dst, src);
+
+ return (strlen(dst));
+}
+#endif