Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
6f06ccbc
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6f06ccbc
编写于
4月 20, 2009
作者:
I
Ingo Molnar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
perf_counter tools: clean up after introduction of the Git command framework
Signed-off-by:
N
Ingo Molnar
<
mingo@elte.hu
>
上级
07800601
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
45 addition
and
352 deletion
+45
-352
Documentation/perf_counter/Makefile
Documentation/perf_counter/Makefile
+6
-201
Documentation/perf_counter/builtin-help.c
Documentation/perf_counter/builtin-help.c
+0
-2
Documentation/perf_counter/builtin-top.c
Documentation/perf_counter/builtin-top.c
+3
-14
Documentation/perf_counter/cache.h
Documentation/perf_counter/cache.h
+20
-0
Documentation/perf_counter/config.c
Documentation/perf_counter/config.c
+1
-94
Documentation/perf_counter/path.c
Documentation/perf_counter/path.c
+0
-39
Documentation/perf_counter/perf.c
Documentation/perf_counter/perf.c
+1
-2
Documentation/perf_counter/util.h
Documentation/perf_counter/util.h
+14
-0
未找到文件。
Documentation/perf_counter/Makefile
浏览文件 @
6f06ccbc
...
...
@@ -138,16 +138,6 @@ all::
#
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
# The TCL_PATH variable governs the location of the Tcl interpreter
# used to optimize perf-gui for your system. Only used if NO_TCLTK
# is not set. Defaults to the bare 'tclsh'.
#
# The TCLTK_PATH variable governs the location of the Tcl/Tk interpreter.
# If not set it defaults to the bare 'wish'. If it is set to the empty
# string then NO_TCLTK will be forced (this is used by configure script).
#
# Define INTERNAL_QSORT to use Git's implementation of qsort(), which
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
...
...
@@ -215,12 +205,8 @@ TAR = tar
FIND
=
find
INSTALL
=
install
RPMBUILD
=
rpmbuild
TCL_PATH
=
tclsh
TCLTK_PATH
=
wish
PTHREAD_LIBS
=
-lpthread
export
TCL_PATH
TCLTK_PATH
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
SPARSE_FLAGS
=
-D__BIG_ENDIAN__
-D__powerpc__
...
...
@@ -529,10 +515,6 @@ ifdef NO_EXTERNAL_GREP
BASIC_CFLAGS
+=
-DNO_EXTERNAL_GREP
endif
ifeq
($(TCLTK_PATH),)
NO_TCLTK
=
NoThanks
endif
ifeq
($(PERL_PATH),)
NO_PERL
=
NoThanks
endif
...
...
@@ -583,7 +565,6 @@ prefix_SQ = $(subst ','\'',$(prefix))
SHELL_PATH_SQ
=
$(
subst
'
,
'\'',
$(SHELL_PATH)
)
PERL_PATH_SQ
=
$(
subst
'
,
'\'',
$(PERL_PATH)
)
TCLTK_PATH_SQ
=
$(
subst
'
,
'\'',
$(TCLTK_PATH)
)
LIBS
=
$(PERFLIBS)
$(EXTLIBS)
...
...
@@ -607,14 +588,6 @@ ifneq (,$X)
endif
all
::
ifndef
NO_TCLTK
$(QUIET_SUBDIR0)
perf-gui
$(QUIET_SUBDIR1)
perfexecdir
=
'
$(perfexec_instdir_SQ)
'
all
$(QUIET_SUBDIR0)
perfk-perf
$(QUIET_SUBDIR1)
all
endif
ifndef
NO_PERL
$(QUIET_SUBDIR0)
perl
$(QUIET_SUBDIR1)
PERL_PATH
=
'
$(PERL_PATH_SQ)
'
prefix
=
'
$(prefix_SQ)
'
all
endif
$(QUIET_SUBDIR0)
templates
$(QUIET_SUBDIR1)
please_set_SHELL_PATH_to_a_more_modern_shell
:
@
$$
(
:
)
...
...
@@ -704,21 +677,6 @@ builtin-revert.o wt-status.o: wt-status.h
$(LIB_FILE)
:
$(LIB_OBJS)
$(QUIET_AR)$(RM)
$@
&&
$(AR)
rcs
$@
$(LIB_OBJS)
doc
:
$(MAKE)
-C
Documentation all
man
:
$(MAKE)
-C
Documentation man
html
:
$(MAKE)
-C
Documentation html
info
:
$(MAKE)
-C
Documentation info
pdf
:
$(MAKE)
-C
Documentation pdf
TAGS
:
$(RM)
TAGS
$(FIND)
.
-name
'*.[hcS]'
-print
| xargs etags
-a
...
...
@@ -751,33 +709,12 @@ PERF-BUILD-OPTIONS: .FORCE-PERF-BUILD-OPTIONS
@
echo
NO_CURL
=
\'
'
$(
subst
'
,
'\'',
$(
subst
'
,
'\'',
$(NO_CURL)
))
'
\'
>>
$@
@
echo
NO_PERL
=
\'
'
$(
subst
'
,
'\'',
$(
subst
'
,
'\'',
$(NO_PERL)
))
'
\'
>>
$@
### Detect Tck/Tk interpreter path changes
ifndef
NO_TCLTK
TRACK_VARS
=
$(
subst
','
\'
',-DTCLTK_PATH='
$(TCLTK_PATH_SQ)
'
)
PERF-GUI-VARS
:
.FORCE-PERF-GUI-VARS
@
VARS='
$(TRACK_VARS)
'; \
if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
echo 1>&2 " * new Tcl/Tk interpreter location"; \
echo "$$VARS" >$@; \
fi
.PHONY
:
.FORCE-PERF-GUI-VARS
endif
### Testing rules
TEST_PROGRAMS
+=
test-chmtime
$X
TEST_PROGRAMS
+=
test-ctype
$X
TEST_PROGRAMS
+=
test-date
$X
TEST_PROGRAMS
+=
test-delta
$X
TEST_PROGRAMS
+=
test-dump-cache-tree
$X
TEST_PROGRAMS
+=
test-genrandom
$X
TEST_PROGRAMS
+=
test-match-trees
$X
TEST_PROGRAMS
+=
test-parse-options
$X
TEST_PROGRAMS
+=
test-path-utils
$X
TEST_PROGRAMS
+=
test-sha1
$X
TEST_PROGRAMS
+=
test-sigchain
$X
#
# None right now:
#
# TEST_PROGRAMS += test-something$X
all
::
$(TEST_PROGRAMS)
...
...
@@ -787,25 +724,6 @@ all:: $(TEST_PROGRAMS)
export
NO_SVN_TESTS
test
:
all
$(MAKE)
-C
t/ all
test-ctype$X
:
ctype.o
test-date$X
:
date.o ctype.o
test-delta$X
:
diff-delta.o patch-delta.o
test-parse-options$X
:
parse-options.o
.PRECIOUS
:
$(patsubst test-%$X
,
test-%.o
,
$(TEST_PROGRAMS))
test-%$X
:
test-%.o $(PERFLIBS)
$(QUIET_LINK)$(CC)
$(ALL_CFLAGS)
-o
$@
$(ALL_LDFLAGS)
$(
filter
%.o,
$^
)
$(LIBS)
check-sha1
::
test-sha1$X
./test-sha1.sh
check
:
common-cmds.h
if
sparse
;
\
then
\
...
...
@@ -845,10 +763,6 @@ install: all
$(INSTALL)
perf$X perf-upload-pack$X perf-receive-pack$X perf-upload-archive$X perf-shell$X perf-cvsserver '
$(DESTDIR_SQ)$(bindir_SQ)
'
$(MAKE)
-C templates DESTDIR='
$(DESTDIR_SQ)
' install
$(MAKE)
-C perl prefix='
$(prefix_SQ)
' DESTDIR='
$(DESTDIR_SQ)
' install
ifndef
NO_TCLTK
$(MAKE)
-C perfk-perf install
$(MAKE)
-C perf-gui perfexecdir='
$(perfexec_instdir_SQ)
' install
endif
ifneq
(,$X)
$(
foreach
p,
$(
patsubst
%$X,%,
$(
filter
%$X,
$(ALL_PROGRAMS)
$(BUILT_INS)
perf$X
))
,
$(RM)
'
$(DESTDIR_SQ)$(perfexec_instdir_SQ)
/
$p
';
)
endif
...
...
@@ -865,32 +779,6 @@ endif
done } && \
./check_bindir "z$$bindir" "z$$execdir" "$$bindir/perf-add$X"
install-doc
:
$(MAKE)
-C
Documentation
install
install-man
:
$(MAKE)
-C
Documentation install-man
install-html
:
$(MAKE)
-C
Documentation install-html
install-info
:
$(MAKE)
-C
Documentation install-info
install-pdf
:
$(MAKE)
-C
Documentation install-pdf
quick-install-doc
:
$(MAKE)
-C
Documentation quick-install
quick-install-man
:
$(MAKE)
-C
Documentation quick-install-man
quick-install-html
:
$(MAKE)
-C
Documentation quick-install-html
### Maintainer's dist rules
perf.spec
:
perf.spec.in
...
...
@@ -904,38 +792,16 @@ dist: perf.spec perf-archive$(X) configure
@
mkdir
-p
$(PERF_TARNAME)
@
cp
perf.spec configure
$(PERF_TARNAME)
@
echo
$(PERF_VERSION)
>
$(PERF_TARNAME)
/version
@
$(MAKE)
-C
perf-gui
TARDIR
=
../
$(PERF_TARNAME)
/perf-gui dist-version
$(TAR)
rf
$(PERF_TARNAME)
.tar
\
$(PERF_TARNAME)
/perf.spec
\
$(PERF_TARNAME)
/configure
\
$(PERF_TARNAME)
/version
\
$(PERF_TARNAME)
/perf-gui/version
$(PERF_TARNAME)
/version
@
$(RM)
-r
$(PERF_TARNAME)
gzip
-f
-9
$(PERF_TARNAME)
.tar
rpm
:
dist
$(RPMBUILD)
-ta
$(PERF_TARNAME)
.tar.gz
htmldocs
=
perf-htmldocs-
$(PERF_VERSION)
manpages
=
perf-manpages-
$(PERF_VERSION)
dist-doc
:
$(RM)
-r
.doc-tmp-dir
mkdir
.doc-tmp-dir
$(MAKE)
-C
Documentation
WEBDOC_DEST
=
../.doc-tmp-dir install-webdoc
cd
.doc-tmp-dir
&&
$(TAR)
cf ../
$(htmldocs)
.tar .
gzip
-n
-9
-f
$(htmldocs)
.tar
:
$(RM)
-r
.doc-tmp-dir
mkdir
-p
.doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
$(MAKE)
-C
Documentation
DESTDIR
=
./
\
man1dir
=
../.doc-tmp-dir/man1
\
man5dir
=
../.doc-tmp-dir/man5
\
man7dir
=
../.doc-tmp-dir/man7
\
install
cd
.doc-tmp-dir
&&
$(TAR)
cf ../
$(manpages)
.tar .
gzip
-n
-9
-f
$(manpages)
.tar
$(RM)
-r
.doc-tmp-dir
### Cleaning rules
distclean
:
clean
...
...
@@ -951,74 +817,13 @@ clean:
$(RM)
-r
$(PERF_TARNAME)
.doc-tmp-dir
$(RM)
$(PERF_TARNAME)
.tar.gz perf-core_
$(PERF_VERSION)
-
*
.tar.gz
$(RM)
$(htmldocs)
.tar.gz
$(manpages)
.tar.gz
$(MAKE)
-C
Documentation/ clean
$(MAKE)
-C
templates/ clean
$(MAKE)
-C
t/ clean
ifndef
NO_TCLTK
$(MAKE)
-C
perfk-perf clean
$(MAKE)
-C
perf-gui clean
endif
$(RM)
PERF-VERSION-FILE PERF-CFLAGS PERF-GUI-VARS PERF-BUILD-OPTIONS
$(RM)
PERF-VERSION-FILE PERF-CFLAGS PERF-BUILD-OPTIONS
.PHONY
:
all install clean strip
.PHONY
:
shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
.PHONY
:
.FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
.PHONY
:
.FORCE-PERF-BUILD-OPTIONS
### Check documentation
#
check-docs
::
@
(
for
v
in
$(ALL_PROGRAMS)
$(BUILT_INS)
perf perfk
;
\
do
\
case
"
$$
v"
in
\
perf-merge-octopus
|
perf-merge-ours
|
perf-merge-recursive
|
\
perf-merge-resolve
|
perf-merge-subtree
|
\
perf-fsck-objects
|
perf-init-db
|
\
perf-?
*
--
?
*
)
continue
;;
\
esac
;
\
test
-f
"Documentation/
$$
v.txt"
||
\
echo
"no doc:
$$
v"
;
\
sed
-e
'/^#/d'
command-list.txt |
\
grep
-q
"^
$$
v[ ]"
||
\
case
"
$$
v"
in
\
perf
)
;;
\
*
)
echo
"no link:
$$
v"
;;
\
esac
;
\
done
;
\
(
\
sed
-e
'/^#/d'
\
-e
's/[ ].*//'
\
-e
's/^/listed /'
command-list.txt
;
\
ls
-1
Documentation/perf
*
txt |
\
sed
-e
's|Documentation/|documented |'
\
-e
's/\.txt//'
;
\
)
|
while
read
how cmd
;
\
do
\
case
"
$$
how,
$$
cmd"
in
\
*
,perf-citool
|
\
*
,perf-gui
|
\
*
,perf-help
|
\
documented,perfattributes
|
\
documented,perfignore
|
\
documented,perfmodules
|
\
documented,perfcli
|
\
documented,perf-tools
|
\
documented,perfcore-tutorial
|
\
documented,perfcvs-migration
|
\
documented,perfdiffcore
|
\
documented,perfglossary
|
\
documented,perfhooks
|
\
documented,perfrepository-layout
|
\
documented,perftutorial
|
\
documented,perftutorial-2
|
\
sentinel,not,matching,is,ok
)
continue
;;
\
esac
;
\
case
"
$(ALL_PROGRAMS)
$(BUILT_INS)
perf perfk "
in
\
*
"
$$
cmd "
*
)
;;
\
*
)
echo
"removed but
$$
how:
$$
cmd"
;;
\
esac
;
\
done
)
|
sort
### Make sure built-ins do not have dups and listed in perf.c
#
check-builtins
::
...
...
Documentation/perf_counter/builtin-help.c
浏览文件 @
6f06ccbc
...
...
@@ -417,11 +417,9 @@ static void show_html_page(const char *perf_cmd)
int
cmd_help
(
int
argc
,
const
char
**
argv
,
const
char
*
prefix
)
{
int
nonperf
;
const
char
*
alias
;
load_command_list
(
"perf-"
,
&
main_cmds
,
&
other_cmds
);
/* setup_perf_directory_gently(&nonperf); */
perf_config
(
perf_help_config
,
NULL
);
argc
=
parse_options
(
argc
,
argv
,
builtin_help_options
,
...
...
Documentation/perf_counter/builtin-top.c
浏览文件 @
6f06ccbc
...
...
@@ -63,15 +63,6 @@
#include "util.h"
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <getopt.h>
#include <assert.h>
#include <fcntl.h>
...
...
@@ -103,8 +94,6 @@
#define PR_TASK_PERF_COUNTERS_DISABLE 31
#define PR_TASK_PERF_COUNTERS_ENABLE 32
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#define rdclock() \
({ \
struct timespec ts; \
...
...
@@ -1077,7 +1066,7 @@ static void process_event(uint64_t ip, int counter)
record_ip
(
ip
,
counter
);
}
static
void
process_options
(
int
argc
,
char
*
argv
[]
)
static
void
process_options
(
int
argc
,
char
*
*
argv
)
{
int
error
=
0
,
counter
;
...
...
@@ -1255,7 +1244,7 @@ static void mmap_read(struct mmap_data *md)
event_t
event_copy
;
unsigned
in
t
size
=
event
->
header
.
size
;
size_
t
size
=
event
->
header
.
size
;
/*
* Event straddles the mmap boundary -- header should always
...
...
@@ -1301,7 +1290,7 @@ static void mmap_read(struct mmap_data *md)
md
->
prev
=
old
;
}
int
cmd_top
(
int
argc
,
c
onst
c
har
**
argv
,
const
char
*
prefix
)
int
cmd_top
(
int
argc
,
char
**
argv
,
const
char
*
prefix
)
{
struct
pollfd
event_array
[
MAX_NR_CPUS
*
MAX_COUNTERS
];
struct
mmap_data
mmap_array
[
MAX_NR_CPUS
][
MAX_COUNTERS
];
...
...
Documentation/perf_counter/cache.h
浏览文件 @
6f06ccbc
...
...
@@ -94,4 +94,24 @@ static inline int is_absolute_path(const char *path)
{
return
path
[
0
]
==
'/'
;
}
const
char
*
make_absolute_path
(
const
char
*
path
);
const
char
*
make_nonrelative_path
(
const
char
*
path
);
const
char
*
make_relative_path
(
const
char
*
abs
,
const
char
*
base
);
int
normalize_path_copy
(
char
*
dst
,
const
char
*
src
);
int
longest_ancestor_length
(
const
char
*
path
,
const
char
*
prefix_list
);
char
*
strip_path_suffix
(
const
char
*
path
,
const
char
*
suffix
);
extern
char
*
mkpath
(
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
extern
char
*
perf_path
(
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
extern
char
*
mksnpath
(
char
*
buf
,
size_t
n
,
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
3
,
4
)));
extern
char
*
perf_snpath
(
char
*
buf
,
size_t
n
,
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
3
,
4
)));
extern
char
*
perf_pathdup
(
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
extern
size_t
strlcpy
(
char
*
dest
,
const
char
*
src
,
size_t
size
);
#endif
/* CACHE_H */
Documentation/perf_counter/config.c
浏览文件 @
6f06ccbc
...
...
@@ -15,7 +15,6 @@ static FILE *config_file;
static
const
char
*
config_file_name
;
static
int
config_linenr
;
static
int
config_file_eof
;
static
int
zlib_compression_seen
;
const
char
*
config_exclusive_filename
=
NULL
;
...
...
@@ -533,14 +532,6 @@ static int store_aux(const char* key, const char* value, void *cb)
return
0
;
}
static
int
write_error
(
const
char
*
filename
)
{
error
(
"failed to write new configuration file %s"
,
filename
);
/* Same error code as "failed to rename". */
return
4
;
}
static
int
store_write_section
(
int
fd
,
const
char
*
key
)
{
const
char
*
dot
;
...
...
@@ -673,7 +664,7 @@ int perf_config_set_multivar(const char* key, const char* value,
{
int
i
,
dot
;
int
fd
=
-
1
,
in_fd
;
int
ret
;
int
ret
=
0
;
char
*
config_filename
;
const
char
*
last_dot
=
strrchr
(
key
,
'.'
);
...
...
@@ -872,90 +863,6 @@ int perf_config_set_multivar(const char* key, const char* value,
}
static
int
section_name_match
(
const
char
*
buf
,
const
char
*
name
)
{
int
i
=
0
,
j
=
0
,
dot
=
0
;
for
(;
buf
[
i
]
&&
buf
[
i
]
!=
']'
;
i
++
)
{
if
(
!
dot
&&
isspace
(
buf
[
i
]))
{
dot
=
1
;
if
(
name
[
j
++
]
!=
'.'
)
break
;
for
(
i
++
;
isspace
(
buf
[
i
]);
i
++
)
;
/* do nothing */
if
(
buf
[
i
]
!=
'"'
)
break
;
continue
;
}
if
(
buf
[
i
]
==
'\\'
&&
dot
)
i
++
;
else
if
(
buf
[
i
]
==
'"'
&&
dot
)
{
for
(
i
++
;
isspace
(
buf
[
i
]);
i
++
)
;
/* do_nothing */
break
;
}
if
(
buf
[
i
]
!=
name
[
j
++
])
break
;
}
return
(
buf
[
i
]
==
']'
&&
name
[
j
]
==
0
);
}
/* if new_name == NULL, the section is removed instead */
int
perf_config_rename_section
(
const
char
*
old_name
,
const
char
*
new_name
)
{
int
ret
=
0
,
remove
=
0
;
char
*
config_filename
;
int
out_fd
;
char
buf
[
1024
];
if
(
config_exclusive_filename
)
config_filename
=
strdup
(
config_exclusive_filename
);
else
config_filename
=
perf_pathdup
(
"config"
);
if
(
out_fd
<
0
)
{
ret
=
error
(
"could not lock config file %s"
,
config_filename
);
goto
out
;
}
if
(
!
(
config_file
=
fopen
(
config_filename
,
"rb"
)))
{
/* no config file means nothing to rename, no error */
goto
unlock_and_out
;
}
while
(
fgets
(
buf
,
sizeof
(
buf
),
config_file
))
{
int
i
;
int
length
;
for
(
i
=
0
;
buf
[
i
]
&&
isspace
(
buf
[
i
]);
i
++
)
;
/* do nothing */
if
(
buf
[
i
]
==
'['
)
{
/* it's a section */
if
(
section_name_match
(
&
buf
[
i
+
1
],
old_name
))
{
ret
++
;
if
(
new_name
==
NULL
)
{
remove
=
1
;
continue
;
}
store
.
baselen
=
strlen
(
new_name
);
if
(
!
store_write_section
(
out_fd
,
new_name
))
{
goto
out
;
}
continue
;
}
remove
=
0
;
}
if
(
remove
)
continue
;
length
=
strlen
(
buf
);
if
(
write_in_full
(
out_fd
,
buf
,
length
)
!=
length
)
{
goto
out
;
}
}
fclose
(
config_file
);
unlock_and_out:
out:
free
(
config_filename
);
return
ret
;
}
/*
* Call this to report error for your variable that should not
* get a boolean value (i.e. "[my] var" means "true").
...
...
Documentation/perf_counter/path.c
浏览文件 @
6f06ccbc
...
...
@@ -161,45 +161,6 @@ int perf_mkstemp(char *path, size_t len, const char *template)
}
static
char
*
user_path
(
char
*
buf
,
char
*
path
,
int
sz
)
{
struct
passwd
*
pw
;
char
*
slash
;
int
len
,
baselen
;
if
(
!
path
||
path
[
0
]
!=
'~'
)
return
NULL
;
path
++
;
slash
=
strchr
(
path
,
'/'
);
if
(
path
[
0
]
==
'/'
||
!
path
[
0
])
{
pw
=
getpwuid
(
getuid
());
}
else
{
if
(
slash
)
{
*
slash
=
0
;
pw
=
getpwnam
(
path
);
*
slash
=
'/'
;
}
else
pw
=
getpwnam
(
path
);
}
if
(
!
pw
||
!
pw
->
pw_dir
||
sz
<=
strlen
(
pw
->
pw_dir
))
return
NULL
;
baselen
=
strlen
(
pw
->
pw_dir
);
memcpy
(
buf
,
pw
->
pw_dir
,
baselen
);
while
((
1
<
baselen
)
&&
(
buf
[
baselen
-
1
]
==
'/'
))
{
buf
[
baselen
-
1
]
=
0
;
baselen
--
;
}
if
(
slash
&&
slash
[
1
])
{
len
=
strlen
(
slash
);
if
(
sz
<=
baselen
+
len
)
return
NULL
;
memcpy
(
buf
+
baselen
,
slash
,
len
+
1
);
}
return
buf
;
}
const
char
*
make_relative_path
(
const
char
*
abs
,
const
char
*
base
)
{
static
char
buf
[
PATH_MAX
+
1
];
...
...
Documentation/perf_counter/perf.c
浏览文件 @
6f06ccbc
#include "builtin.h"
#include "exec_cmd.h"
#include "cache.h"
//
#include "quote.h"
#include "quote.h"
#include "run-command.h"
const
char
perf_usage_string
[]
=
...
...
@@ -132,7 +132,6 @@ static int handle_alias(int *argcp, const char ***argv)
const
char
**
new_argv
;
const
char
*
alias_command
;
char
*
alias_string
;
int
unused_nonperf
;
alias_command
=
(
*
argv
)[
0
];
alias_string
=
alias_lookup
(
alias_command
);
...
...
Documentation/perf_counter/util.h
浏览文件 @
6f06ccbc
...
...
@@ -295,6 +295,20 @@ static inline char *gitstrchrnul(const char *s, int c)
}
#endif
/*
* Wrappers:
*/
extern
char
*
xstrdup
(
const
char
*
str
);
extern
void
*
xmalloc
(
size_t
size
);
extern
void
*
xmemdupz
(
const
void
*
data
,
size_t
len
);
extern
char
*
xstrndup
(
const
char
*
str
,
size_t
len
);
extern
void
*
xrealloc
(
void
*
ptr
,
size_t
size
);
extern
void
*
xcalloc
(
size_t
nmemb
,
size_t
size
);
extern
void
*
xmmap
(
void
*
start
,
size_t
length
,
int
prot
,
int
flags
,
int
fd
,
off_t
offset
);
extern
ssize_t
xread
(
int
fd
,
void
*
buf
,
size_t
len
);
extern
ssize_t
xwrite
(
int
fd
,
const
void
*
buf
,
size_t
len
);
extern
int
xdup
(
int
fd
);
extern
FILE
*
xfdopen
(
int
fd
,
const
char
*
mode
);
static
inline
size_t
xsize_t
(
off_t
len
)
{
return
(
size_t
)
len
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录