mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Add kmem_vasprintf function
We might as well have both asprintf() variants. This allows us to safely pass a va_list through several levels of the stack using va_copy() instead of va_start().
This commit is contained in:
parent
438683c0a9
commit
e6de04b73c
@ -248,6 +248,7 @@ enum {
|
||||
#define KMC_DEFAULT_SEEKS 1
|
||||
|
||||
extern int kmem_debugging(void);
|
||||
extern char *kmem_vasprintf(const char *fmt, va_list ap);
|
||||
extern char *kmem_asprintf(const char *fmt, ...);
|
||||
#define strfree(str) kfree(str)
|
||||
#define strdup(str) kstrdup(str, GFP_KERNEL)
|
||||
|
@ -239,16 +239,32 @@ EXPORT_SYMBOL(kvasprintf);
|
||||
#endif /* HAVE_KVASPRINTF */
|
||||
|
||||
char *
|
||||
kmem_asprintf(const char *fmt, ...)
|
||||
kmem_vasprintf(const char *fmt, va_list ap)
|
||||
{
|
||||
va_list args;
|
||||
va_list aq;
|
||||
char *ptr;
|
||||
|
||||
va_start(args, fmt);
|
||||
va_copy(aq, ap);
|
||||
do {
|
||||
ptr = kvasprintf(GFP_KERNEL, fmt, args);
|
||||
ptr = kvasprintf(GFP_KERNEL, fmt, aq);
|
||||
} while (ptr == NULL);
|
||||
va_end(args);
|
||||
va_end(aq);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
EXPORT_SYMBOL(kmem_vasprintf);
|
||||
|
||||
char *
|
||||
kmem_asprintf(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *ptr;
|
||||
|
||||
va_start(ap, fmt);
|
||||
do {
|
||||
ptr = kvasprintf(GFP_KERNEL, fmt, ap);
|
||||
} while (ptr == NULL);
|
||||
va_end(ap);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user