Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
perf
util
alias.c
Go to the documentation of this file.
1
#include "
cache.h
"
2
3
static
const
char
*alias_key;
4
static
char
*alias_val;
5
6
static
int
alias_lookup_cb(
const
char
*
k
,
const
char
*
v
,
7
void
*
cb
__maybe_unused
)
8
{
9
if
(!
prefixcmp
(k,
"alias."
) && !
strcmp
(k+6, alias_key)) {
10
if
(!v)
11
return
config_error_nonbool
(k);
12
alias_val = strdup(v);
13
return
0;
14
}
15
return
0;
16
}
17
18
char
*
alias_lookup
(
const
char
*
alias
)
19
{
20
alias_key =
alias
;
21
alias_val =
NULL
;
22
perf_config
(alias_lookup_cb,
NULL
);
23
return
alias_val;
24
}
25
26
int
split_cmdline
(
char
*
cmdline
,
const
char
***argv)
27
{
28
int
src
,
dst
,
count
= 0,
size
= 16;
29
char
quoted = 0;
30
31
*argv =
malloc
(
sizeof
(
char
*) *
size
);
32
33
/* split alias_string */
34
(*argv)[count++] = cmdline;
35
for
(src = dst = 0; cmdline[
src
];) {
36
char
c
= cmdline[
src
];
37
if
(!quoted &&
isspace
(c)) {
38
cmdline[dst++] = 0;
39
while
(cmdline[++src]
40
&&
isspace
(cmdline[src]))
41
;
/* skip */
42
if
(count >=
size
) {
43
size
+= 16;
44
*argv = realloc(*argv,
sizeof
(
char
*) *
size
);
45
}
46
(*argv)[count++] = cmdline +
dst
;
47
}
else
if
(!quoted && (c ==
'\''
|| c ==
'"'
)) {
48
quoted =
c
;
49
src++;
50
}
else
if
(c == quoted) {
51
quoted = 0;
52
src++;
53
}
else
{
54
if
(c ==
'\\'
&& quoted !=
'\''
) {
55
src++;
56
c = cmdline[
src
];
57
if
(!c) {
58
free
(*argv);
59
*argv =
NULL
;
60
return
error
(
"cmdline ends with \\"
);
61
}
62
}
63
cmdline[dst++] =
c
;
64
src++;
65
}
66
}
67
68
cmdline[
dst
] = 0;
69
70
if
(quoted) {
71
free
(*argv);
72
*argv =
NULL
;
73
return
error
(
"unclosed quote"
);
74
}
75
76
return
count
;
77
}
78
Generated on Thu Jan 10 2013 15:09:19 for Linux Kernel by
1.8.2