123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include "direwolf.h"
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #if DEBUG_STRL
- size_t strlcpy_debug(char *__restrict__ dst, const char *__restrict__ src, size_t siz, const char *file, const char *func, int line)
- #else
- size_t strlcpy_debug(char *__restrict__ dst, const char *__restrict__ src, size_t siz)
- #endif
- {
- char *d = dst;
- const char *s = src;
- size_t n = siz;
- size_t retval;
- #if DEBUG_STRL
- if (dst == NULL) {
-
- printf ("ERROR: strlcpy dst is NULL. (%s %s %d)\n", file, func, line);
- return (0);
- }
- if (src == NULL) {
-
- printf ("ERROR: strlcpy src is NULL. (%s %s %d)\n", file, func, line);
- return (0);
- }
- if (siz == 1 || siz == 4) {
-
- printf ("Suspicious strlcpy siz. Is it using sizeof a pointer variable? (%s %s %d)\n", file, func, line);
- }
- #endif
-
- if (n != 0 && --n != 0) {
- do {
- if ((*d++ = *s++) == 0)
- break;
- } while (--n != 0);
- }
-
- if (n == 0) {
- if (siz != 0)
- *d = '\0';
- while (*s++)
- ;
- }
- retval = s - src - 1;
- #if DEBUG_STRL
- if (retval >= siz) {
-
- printf ("WARNING: strlcpy result length %d exceeds maximum length %d. (%s %s %d)\n",
- (int)retval, (int)(siz-1), file, func, line);
- }
- #endif
- return (retval);
- }
|