memutil.c 1.1 KB

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