45 lines
		
	
	
	
		
			680 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
	
		
			680 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  *  linux/lib/kasprintf.c | ||
|  |  * | ||
|  |  *  Copyright (C) 1991, 1992  Linus Torvalds | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <stdarg.h>
 | ||
|  | #include <linux/module.h>
 | ||
|  | #include <linux/types.h>
 | ||
|  | #include <linux/string.h>
 | ||
|  | 
 | ||
|  | /* Simplified asprintf. */ | ||
|  | char *kvasprintf(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 = kmalloc(len+1, gfp); | ||
|  | 	if (!p) | ||
|  | 		return NULL; | ||
|  | 
 | ||
|  | 	vsnprintf(p, len+1, fmt, ap); | ||
|  | 
 | ||
|  | 	return p; | ||
|  | } | ||
|  | EXPORT_SYMBOL(kvasprintf); | ||
|  | 
 | ||
|  | char *kasprintf(gfp_t gfp, const char *fmt, ...) | ||
|  | { | ||
|  | 	va_list ap; | ||
|  | 	char *p; | ||
|  | 
 | ||
|  | 	va_start(ap, fmt); | ||
|  | 	p = kvasprintf(gfp, fmt, ap); | ||
|  | 	va_end(ap); | ||
|  | 
 | ||
|  | 	return p; | ||
|  | } | ||
|  | EXPORT_SYMBOL(kasprintf); |