memutil.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include <string.h>
  2. #include "memcpy.h"
  3. #include "memutil.h"
  4. #include "src/main.h"
  5. #include <stdlib.h>
  6. void
  7. str_redup(char **str, const char *newstr)
  8. {
  9. size_t len;
  10. if (!newstr) {
  11. if (*str) free(*str);
  12. *str = NULL;
  13. return;
  14. }
  15. len = strlen(newstr) + 1;
  16. *str = (char *) my_realloc(*str, len);
  17. memcpy(*str, newstr, len);
  18. }
  19. char *
  20. strdup(const char *entry)
  21. {
  22. size_t len = strlen(entry);
  23. char *target = (char *) my_calloc(1, len + 1);
  24. if (target == NULL) return NULL;
  25. target[len] = 0;
  26. return (char *) memcpy(target, entry, len);
  27. }
  28. char *
  29. strldup(const char *entry, size_t maxlen)
  30. {
  31. size_t slen = strlen(entry);
  32. size_t len = slen < maxlen ? slen : maxlen;
  33. char *target = (char *) my_calloc(1, len + 1);
  34. if (target == NULL) return NULL;
  35. target[len] = 0;
  36. return (char *) memcpy(target, entry, len);
  37. }
  38. void *my_calloc(size_t nmemb, size_t size)
  39. {
  40. void *ptr = calloc(nmemb, size);
  41. if (ptr == NULL)
  42. exit(5);
  43. return ptr;
  44. }
  45. void *my_realloc(void *ptr, size_t size)
  46. {
  47. void *x = realloc(ptr, size);
  48. if (x == NULL && size > 0)
  49. exit(5);
  50. return x;
  51. }