From 9514ac73c71456fe9082f40bf7c9a8a2278b47aa Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sat, 6 Dec 2014 03:53:16 +0000 Subject: [PATCH] file.c: export sprintmode and move it to a separate file * printmode.c: New file. * Makefile.am (strace_SOURCES): Add it. * defs.h (sprintmode): New prototype. * file.c (sprintmode): Make global and move to printmode.c. --- Makefile.am | 1 + defs.h | 1 + file.c | 27 --------------------------- printmode.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 printmode.c diff --git a/Makefile.am b/Makefile.am index f7e477a7..bae7d431 100644 --- a/Makefile.am +++ b/Makefile.am @@ -46,6 +46,7 @@ strace_SOURCES = \ or1k_atomic.c \ pathtrace.c \ personality.c \ + printmode.c \ process.c \ ptp.c \ quota.c \ diff --git a/defs.h b/defs.h index 708adf61..bcdf6253 100644 --- a/defs.h +++ b/defs.h @@ -672,6 +672,7 @@ extern int printargs_ld(struct tcb *); extern void addflags(const struct xlat *, int); extern int printflags(const struct xlat *, int, const char *); extern const char *sprintflags(const char *, const struct xlat *, int); +extern const char *sprintmode(int); extern void dumpiov_in_msghdr(struct tcb *, long); extern void dumpiov_in_mmsghdr(struct tcb *, long); extern void dumpiov(struct tcb *, int, long); diff --git a/file.c b/file.c index f13f613b..5bcf8940 100644 --- a/file.c +++ b/file.c @@ -506,33 +506,6 @@ sys_ftruncate64(struct tcb *tcp) /* several stats */ -#include "xlat/modetypes.h" - -static const char * -sprintmode(int mode) -{ - static char buf[sizeof("S_IFSOCK|S_ISUID|S_ISGID|S_ISVTX|%o") - + sizeof(int)*3 - + /*paranoia:*/ 8]; - const char *s; - - if ((mode & S_IFMT) == 0) - s = ""; - else if ((s = xlookup(modetypes, mode & S_IFMT)) == NULL) { - sprintf(buf, "%#o", mode); - return buf; - } - s = buf + sprintf(buf, "%s%s%s%s", s, - (mode & S_ISUID) ? "|S_ISUID" : "", - (mode & S_ISGID) ? "|S_ISGID" : "", - (mode & S_ISVTX) ? "|S_ISVTX" : ""); - mode &= ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX); - if (mode) - sprintf((char*)s, "|%#o", mode); - s = (*buf == '|') ? buf + 1 : buf; - return *s ? s : "0"; -} - static char * sprinttime(time_t t) { diff --git a/printmode.c b/printmode.c new file mode 100644 index 00000000..4df1b9f2 --- /dev/null +++ b/printmode.c @@ -0,0 +1,30 @@ +#include "defs.h" + +#include + +#include "xlat/modetypes.h" + +const char * +sprintmode(int mode) +{ + static char buf[sizeof("S_IFSOCK|S_ISUID|S_ISGID|S_ISVTX|%o") + + sizeof(int)*3 + + /*paranoia:*/ 8]; + const char *s; + + if ((mode & S_IFMT) == 0) + s = ""; + else if ((s = xlookup(modetypes, mode & S_IFMT)) == NULL) { + sprintf(buf, "%#o", mode); + return buf; + } + s = buf + sprintf(buf, "%s%s%s%s", s, + (mode & S_ISUID) ? "|S_ISUID" : "", + (mode & S_ISGID) ? "|S_ISGID" : "", + (mode & S_ISVTX) ? "|S_ISVTX" : ""); + mode &= ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX); + if (mode) + sprintf((char*)s, "|%#o", mode); + s = (*buf == '|') ? buf + 1 : buf; + return *s ? s : "0"; +} -- 2.34.1