mirror of
https://github.com/netwide-assembler/nasm
synced 2026-08-26 16:23:04 -04:00
Add nasm_strdupto() and nasm_strto(), to replace a string variable
It is common enough that one wants to set a string pointer to a newly allocated string, freeing the old one if it is not NULL. Add specific helper functions for this. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
parent
7b4e77dae2
commit
44245e4684
2 changed files with 34 additions and 0 deletions
|
|
@ -102,6 +102,29 @@ char * safe_alloc nasm_strndup(const char *, size_t);
|
|||
char * safe_alloc nasm_strcat(const char *one, const char *two);
|
||||
char * safe_alloc end_with_null nasm_strcatn(const char *one, ...);
|
||||
|
||||
/*
|
||||
* Replace a string in a string pointer variable with a nasm_strdup()
|
||||
* copy of the argument on the right, freeing the contents of the
|
||||
* previous contents of the variable if non-NULL.
|
||||
*
|
||||
* If *str is NULL, simply return the old value of *ptrp.
|
||||
*/
|
||||
char *nasm_strdupto(char **ptrp, const char *str);
|
||||
|
||||
/*
|
||||
* Similar, but the new pointer must already have been heap allocated
|
||||
* by the creating function.
|
||||
*/
|
||||
static inline char *nasm_strto(char **ptrp, char *str)
|
||||
{
|
||||
char *ptr = *ptrp;
|
||||
if (!str)
|
||||
return ptr;
|
||||
if (ptr)
|
||||
nasm_free(ptr);
|
||||
return *ptrp = str;
|
||||
}
|
||||
|
||||
/*
|
||||
* nasm_[v]asprintf() are variants of the semi-standard [v]asprintf()
|
||||
* functions, except that we return the pointer instead of a count.
|
||||
|
|
|
|||
|
|
@ -99,6 +99,17 @@ char *nasm_strndup(const char *s, size_t len)
|
|||
return memcpy(p, s, len);
|
||||
}
|
||||
|
||||
char *nasm_strdupto(char **ptrp, const char *str)
|
||||
{
|
||||
char *ptr = *ptrp;
|
||||
if (str) {
|
||||
if (ptr)
|
||||
nasm_free(ptr);
|
||||
*ptrp = ptr = nasm_strdup(str);
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
char *nasm_strcat(const char *one, const char *two)
|
||||
{
|
||||
char *rslt;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue