Fix cfw_strndup() and add cfw_strnlen().
This commit is contained in:
parent
f9171cf8a1
commit
8f0ffd2483
2 changed files with 15 additions and 10 deletions
24
src/string.c
24
src/string.c
|
@ -39,6 +39,17 @@ struct CFWString {
|
||||||
size_t len;
|
size_t len;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
size_t
|
||||||
|
cfw_strnlen(const char *s, size_t max)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < max && *s != '\0'; s++)
|
||||||
|
i++;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
cfw_strdup(const char *s)
|
cfw_strdup(const char *s)
|
||||||
{
|
{
|
||||||
|
@ -47,10 +58,8 @@ cfw_strdup(const char *s)
|
||||||
|
|
||||||
len = strlen(s);
|
len = strlen(s);
|
||||||
|
|
||||||
if ((copy = malloc(len + 1)) == NULL) {
|
if ((copy = malloc(len + 1)) == NULL)
|
||||||
errno = ENOMEM;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(copy, s, len);
|
memcpy(copy, s, len);
|
||||||
copy[len] = 0;
|
copy[len] = 0;
|
||||||
|
@ -64,15 +73,10 @@ cfw_strndup(const char *s, size_t max)
|
||||||
char *copy;
|
char *copy;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
len = strlen(s);
|
len = cfw_strnlen(s, max);
|
||||||
|
|
||||||
if (len > max)
|
if ((copy = malloc(len + 1)) == NULL)
|
||||||
len = max;
|
|
||||||
|
|
||||||
if ((copy = malloc(len + 1)) == NULL) {
|
|
||||||
errno = ENOMEM;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(copy, s, len);
|
memcpy(copy, s, len);
|
||||||
copy[len] = 0;
|
copy[len] = 0;
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
typedef struct CFWString CFWString;
|
typedef struct CFWString CFWString;
|
||||||
extern CFWClass *cfw_string;
|
extern CFWClass *cfw_string;
|
||||||
|
extern size_t cfw_strnlen(const char*, size_t);
|
||||||
extern char* cfw_strdup(const char*);
|
extern char* cfw_strdup(const char*);
|
||||||
extern char* cfw_strndup(const char*, size_t);
|
extern char* cfw_strndup(const char*, size_t);
|
||||||
extern const char* cfw_string_c(CFWString*);
|
extern const char* cfw_string_c(CFWString*);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue