diff options
Diffstat (limited to 'drivers/base/devres.c')
| -rw-r--r-- | drivers/base/devres.c | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 52302946770f..69d9b0c89a01 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -817,6 +817,61 @@ char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp)  EXPORT_SYMBOL_GPL(devm_kstrdup);  /** + * devm_kvasprintf - Allocate resource managed space + *			for the formatted string. + * @dev: Device to allocate memory for + * @gfp: the GFP mask used in the devm_kmalloc() call when + *       allocating memory + * @fmt: the formatted string to duplicate + * @ap: the list of tokens to be placed in the formatted string + * RETURNS: + * Pointer to allocated string on success, NULL on failure. + */ +char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, +		      va_list ap) +{ +	unsigned int len; +	char *p; +	va_list aq; + +	va_copy(aq, ap); +	len = vsnprintf(NULL, 0, fmt, aq); +	va_end(aq); + +	p = devm_kmalloc(dev, len+1, gfp); +	if (!p) +		return NULL; + +	vsnprintf(p, len+1, fmt, ap); + +	return p; +} +EXPORT_SYMBOL(devm_kvasprintf); + +/** + * devm_kasprintf - Allocate resource managed space + *		and copy an existing formatted string into that + * @dev: Device to allocate memory for + * @gfp: the GFP mask used in the devm_kmalloc() call when + *       allocating memory + * @fmt: the string to duplicate + * RETURNS: + * Pointer to allocated string on success, NULL on failure. + */ +char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...) +{ +	va_list ap; +	char *p; + +	va_start(ap, fmt); +	p = devm_kvasprintf(dev, gfp, fmt, ap); +	va_end(ap); + +	return p; +} +EXPORT_SYMBOL_GPL(devm_kasprintf); + +/**   * devm_kfree - Resource-managed kfree   * @dev: Device this memory belongs to   * @p: Memory to free  |