summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/misc.c14
-rw-r--r--src/core/misc.h3
2 files changed, 17 insertions, 0 deletions
diff --git a/src/core/misc.c b/src/core/misc.c
index 1359b71b..f080fd0f 100644
--- a/src/core/misc.c
+++ b/src/core/misc.c
@@ -778,6 +778,20 @@ char *escape_string(const char *str)
return ret;
}
+int strocpy(char *dest, const char *src, size_t dstsize)
+{
+ if (dstsize == 0)
+ return -1;
+
+ while (*src != '\0' && dstsize > 1) {
+ *dest++ = *src++;
+ dstsize--;
+ }
+
+ *dest++ = '\0';
+ return *src == '\0' ? 0 : -1;
+}
+
int nearest_power(int num)
{
int n = 1;
diff --git a/src/core/misc.h b/src/core/misc.h
index 37a3953d..35a9dfc8 100644
--- a/src/core/misc.h
+++ b/src/core/misc.h
@@ -101,6 +101,9 @@ int expand_escape(const char **data);
/* Escape all '"', "'" and '\' chars with '\' */
char *escape_string(const char *str);
+/* Like strlcpy(), but return -1 if buffer was overflown, 0 if not. */
+int strocpy(char *dest, const char *src, size_t dstsize);
+
int nearest_power(int num);
/* Returns TRUE / FALSE */