diff options
Diffstat (limited to 'helpers.c')
-rw-r--r-- | helpers.c | 19 |
1 files changed, 10 insertions, 9 deletions
@@ -25,7 +25,7 @@ uint32_t address_to_bits(uint32_t addr) { unsigned int lzb = 0; - while (((1 << (31 - lzb)) & ~addr) != 0) + while (((1u << (31 - lzb)) & ~addr) != 0) lzb++; return 32 - lzb; } @@ -106,15 +106,16 @@ char* strtok_r(char *str, const char *delim, char **nextp) /* strndup is a POSIX function not present in MinGW */ char *strndup(const char *src, size_t maxlen) { - if (strlen(src) > maxlen) { - char *retbuf; - if ((retbuf = malloc(1 + maxlen)) != NULL) { - memcpy(retbuf, src, maxlen); - retbuf[maxlen] = '\0'; - } - return retbuf; + char *retbuf; + size_t len; + for (len = 0; len < maxlen; len++) + if (src[len] == '\0') + break; + if ((retbuf = malloc(1 + len)) != NULL) { + memcpy(retbuf, src, len); + retbuf[len] = '\0'; } - return strdup(src); + return retbuf; } #endif |