Browse Source

* Ported [2855] to 1.2.10
* Added a strldup()


svn: 2856

Bryan Drewery 20 years ago
parent
commit
49c5ab896b
2 changed files with 17 additions and 2 deletions
  1. 15 2
      src/compat/memutil.c
  2. 2 0
      src/compat/memutil.h

+ 15 - 2
src/compat/memutil.c

@@ -22,12 +22,25 @@ str_redup(char **str, const char *newstr)
 char *
 strdup(const char *entry)
 {
-  size_t len = strlen(entry) + 1;
-  char *target = (char *) my_calloc(1, len);
+  size_t len = strlen(entry);
+  char *target = (char *) my_calloc(1, len + 1);
   if (target == NULL) return NULL;
+  target[len] = 0;
   return (char *) egg_memcpy(target, entry, len);
 }
 
+char *
+strldup(const char *entry, size_t maxlen)
+{
+  size_t slen = strlen(entry);
+  size_t len = slen < maxlen ? slen : maxlen;
+  char *target = (char *) my_calloc(1, len + 1);
+  if (target == NULL) return NULL;
+  target[len] = 0;
+  return (char *) egg_memcpy(target, entry, len);
+}
+
+
 void *my_calloc(size_t nmemb, size_t size)
 {
   void *ptr = calloc(nmemb, size);

+ 2 - 0
src/compat/memutil.h

@@ -15,6 +15,8 @@
 
 void str_redup(char **, const char *);
 char *strdup(const char *);
+char *strldup(const char *, size_t);
+
 
 void *my_calloc(size_t, size_t);
 void *my_realloc(void *, size_t);