Subversion Repositories Kolibri OS

Rev

Rev 5056 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5056 Rev 6936
1
/*
1
/*
2
 *  linux/lib/kasprintf.c
2
 *  linux/lib/kasprintf.c
3
 *
3
 *
4
 *  Copyright (C) 1991, 1992  Linus Torvalds
4
 *  Copyright (C) 1991, 1992  Linus Torvalds
5
 */
5
 */
6
 
6
 
7
#include 
7
#include 
8
#include 
8
#include 
9
#include 
9
#include 
10
#include 
10
#include 
11
#include 
11
#include 
12
 
12
 
13
/* Simplified asprintf. */
13
/* Simplified asprintf. */
14
char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap)
14
char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap)
15
{
15
{
16
	unsigned int len;
16
	unsigned int first, second;
17
	char *p;
17
	char *p;
18
	va_list aq;
18
	va_list aq;
19
 
19
 
20
	va_copy(aq, ap);
20
	va_copy(aq, ap);
21
	len = vsnprintf(NULL, 0, fmt, aq);
21
	first = vsnprintf(NULL, 0, fmt, aq);
22
	va_end(aq);
22
	va_end(aq);
23
 
23
 
24
    p = kmalloc(len+1, gfp);
24
    p = kmalloc(first+1, gfp);
25
	if (!p)
25
	if (!p)
26
		return NULL;
26
		return NULL;
27
 
27
 
-
 
28
	second = vsnprintf(p, first+1, fmt, ap);
-
 
29
	WARN(first != second, "different return values (%u and %u) from vsnprintf(\"%s\", ...)",
28
	vsnprintf(p, len+1, fmt, ap);
30
	     first, second, fmt);
29
 
31
 
30
	return p;
32
	return p;
31
}
33
}
32
EXPORT_SYMBOL(kvasprintf);
34
EXPORT_SYMBOL(kvasprintf);
-
 
35
 
-
 
36
/*
-
 
37
 * If fmt contains no % (or is exactly %s), use kstrdup_const. If fmt
-
 
38
 * (or the sole vararg) points to rodata, we will then save a memory
-
 
39
 * allocation and string copy. In any case, the return value should be
-
 
40
 * freed using kfree_const().
-
 
41
 */
-
 
42
const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list ap)
-
 
43
{
-
 
44
	if (!strchr(fmt, '%'))
-
 
45
        return strdup(fmt);
-
 
46
	if (!strcmp(fmt, "%s"))
-
 
47
        return strdup(va_arg(ap, const char*));
-
 
48
	return kvasprintf(gfp, fmt, ap);
-
 
49
}
-
 
50
EXPORT_SYMBOL(kvasprintf_const);
33
 
51
 
34
char *kasprintf(gfp_t gfp, const char *fmt, ...)
52
char *kasprintf(gfp_t gfp, const char *fmt, ...)
35
{
53
{
36
	va_list ap;
54
	va_list ap;
37
	char *p;
55
	char *p;
38
 
56
 
39
	va_start(ap, fmt);
57
	va_start(ap, fmt);
40
	p = kvasprintf(gfp, fmt, ap);
58
	p = kvasprintf(gfp, fmt, ap);
41
	va_end(ap);
59
	va_end(ap);
42
 
60
 
43
	return p;
61
	return p;
44
}
62
}
45
EXPORT_SYMBOL(kasprintf);
63
EXPORT_SYMBOL(kasprintf);