Implement strndup() equivalent using rpm alloc failure system

rstrdup() becomes just a special case of this. How come this hasn't
been added earlier?
This commit is contained in:
Panu Matilainen 2020-11-05 14:07:06 +02:00
parent 1eeb0aed88
commit fa29c0da80
2 changed files with 11 additions and 3 deletions

View File

@ -68,16 +68,22 @@ void * rrealloc (void *ptr, size_t size)
return value;
}
char * rstrdup (const char *str)
char * rstrndup(const char *str, size_t n)
{
size_t size = strlen(str) + 1;
size_t size = n + 1;
char *newstr = (char *) malloc (size);
if (newstr == NULL)
newstr = (char *) vmefail(size);
strcpy (newstr, str);
strncpy(newstr, str, n);
newstr[n] = '\0';
return newstr;
}
char * rstrdup (const char *str)
{
return rstrndup(str, strlen(str));
}
void * rfree (void *ptr)
{
free(ptr);

View File

@ -129,6 +129,8 @@ void * rrealloc(void *ptr, size_t size);
char * rstrdup(const char *str);
char * rstrndup(const char *str, size_t n);
/* Rpm specific free() which returns NULL */
void * rfree(void *ptr);