This adds the devm_kasprintf() function added in mainline Linux kernel commit 75f2a4ead "devres: Add devm_kasprintf and devm_kvasprintf API" Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx> --- backport/backport-include/linux/device.h | 8 +++++ backport/compat/backport-3.17.c | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/backport/backport-include/linux/device.h b/backport/backport-include/linux/device.h index f03e7c1..079b00d 100644 --- a/backport/backport-include/linux/device.h +++ b/backport/backport-include/linux/device.h @@ -243,5 +243,13 @@ do { \ dev_level_once(dev_dbg, dev, fmt, ##__VA_ARGS__) #endif /* dev_level_once */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0) +#define devm_kvasprintf LINUX_BACKPORT(devm_kvasprintf) +extern char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, + va_list ap); +#define devm_kasprintf LINUX_BACKPORT(devm_kasprintf) +extern char *devm_kasprintf(struct device *dev, gfp_t gfp, + const char *fmt, ...); +#endif /* < 3.17 */ #endif /* __BACKPORT_DEVICE_H */ diff --git a/backport/compat/backport-3.17.c b/backport/compat/backport-3.17.c index 485f2dc..de99fba 100644 --- a/backport/compat/backport-3.17.c +++ b/backport/compat/backport-3.17.c @@ -9,6 +9,7 @@ */ #include <linux/wait.h> #include <linux/sched.h> +#include <linux/device.h> #include <linux/export.h> #include <linux/ktime.h> #include <linux/jiffies.h> @@ -88,3 +89,58 @@ unsigned long nsecs_to_jiffies(u64 n) return (unsigned long)backport_nsecs_to_jiffies64(n); } EXPORT_SYMBOL_GPL(nsecs_to_jiffies); + +/** + * 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_GPL(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); -- 2.7.0 -- To unsubscribe from this list: send the line "unsubscribe backports" in