X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Freadprofile.c;h=1f5ba2eccae9d9d6d3a3d18b7eccd16bd0bc34f4;hb=90db359972643801300d4139025a25e0ba47c278;hp=a17b9c8808ec043af39d82e104a882eabe84b6d9;hpb=06af2165288cd6516b89001ec9e24992619230e0;p=oweals%2Fbusybox.git diff --git a/util-linux/readprofile.c b/util-linux/readprofile.c index a17b9c880..1f5ba2ecc 100644 --- a/util-linux/readprofile.c +++ b/util-linux/readprofile.c @@ -8,7 +8,7 @@ */ /* - * 1999-02-22 Arkadiusz Mi¶kiewicz + * 1999-02-22 Arkadiusz Mickiewicz * - added Native Language Support * 1999-09-01 Stephane Eranian * - 64bit clean patch @@ -32,20 +32,20 @@ * Paul Mundt . */ -#include "busybox.h" +#include "libbb.h" #include #define S_LEN 128 /* These are the defaults */ -static const char defaultmap[] = "/boot/System.map"; -static const char defaultpro[] = "/proc/profile"; +static const char defaultmap[] ALIGN1 = "/boot/System.map"; +static const char defaultpro[] ALIGN1 = "/proc/profile"; -int readprofile_main(int argc, char **argv); -int readprofile_main(int argc, char **argv) +int readprofile_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int readprofile_main(int argc UNUSED_PARAM, char **argv) { FILE *map; - const char *mapFile, *proFile, *mult = 0; + const char *mapFile, *proFile; unsigned long indx = 1; size_t len; uint64_t add0 = 0; @@ -55,43 +55,52 @@ int readprofile_main(int argc, char **argv) char fn_name[S_LEN], next_name[S_LEN]; /* current and next name */ char mapline[S_LEN]; char mode[8]; - int optAll = 0, optInfo = 0, optReset = 0; - int optVerbose = 0, optNative = 0; - int optBins = 0, optSub = 0; int maplineno = 1; int header_printed; + int multiplier = 0; + unsigned opt; + enum { + OPT_M = (1 << 0), + OPT_m = (1 << 1), + OPT_p = (1 << 2), + OPT_n = (1 << 3), + OPT_a = (1 << 4), + OPT_b = (1 << 5), + OPT_s = (1 << 6), + OPT_i = (1 << 7), + OPT_r = (1 << 8), + OPT_v = (1 << 9), + }; +#define optMult (opt & OPT_M) +#define optNative (opt & OPT_n) +#define optAll (opt & OPT_a) +#define optBins (opt & OPT_b) +#define optSub (opt & OPT_s) +#define optInfo (opt & OPT_i) +#define optReset (opt & OPT_r) +#define optVerbose (opt & OPT_v) #define next (current^1) proFile = defaultpro; mapFile = defaultmap; - opt_complementary = "nn:aa:bb:ss:ii:rr:vv"; - getopt32(argc, argv, "M:m:p:nabsirv", - &mult, &mapFile, &proFile, - &optNative, &optAll, &optBins, &optSub, - &optInfo, &optReset, &optVerbose); + opt_complementary = "M+"; /* -M N */ + opt = getopt32(argv, "M:m:p:nabsirv", &multiplier, &mapFile, &proFile); - if (optReset || mult) { - int multiplier, fd, to_write; + if (opt & (OPT_M|OPT_r)) { /* mult or reset, or both */ + int fd, to_write; /* * When writing the multiplier, if the length of the write is * not sizeof(int), the multiplier is not changed */ - if (mult) { - multiplier = xatoi_u(mult); - to_write = sizeof(int); - } else { - multiplier = 0; + to_write = sizeof(int); + if (!optMult) to_write = 1; /* sth different from sizeof(int) */ - } fd = xopen(defaultpro, O_WRONLY); - - if (full_write(fd, &multiplier, to_write) != to_write) - bb_perror_msg_and_die("error writing %s", defaultpro); - + xwrite(fd, &multiplier, to_write); close(fd); return EXIT_SUCCESS; } @@ -99,10 +108,10 @@ int readprofile_main(int argc, char **argv) /* * Use an fd for the profiling buffer, to skip stdio overhead */ - len = INT_MAX; - buf = xmalloc_open_read_close(proFile, &len); + len = MAXINT(ssize_t); + buf = xmalloc_xopen_read_close(proFile, &len); if (!optNative) { - int entries = len/sizeof(*buf); + int entries = len / sizeof(*buf); int big = 0, small = 0, i; unsigned *p; @@ -135,7 +144,7 @@ int readprofile_main(int argc, char **argv) total = 0; - map = xfopen(mapFile, "r"); + map = xfopen_for_read(mapFile); while (fgets(mapline, S_LEN, map)) { if (sscanf(mapline, "%llx %s %s", &fn_add, mode, fn_name) != 3) @@ -190,8 +199,9 @@ int readprofile_main(int argc, char **argv) if (optBins) { if (optVerbose || this > 0) printf(" total\t\t\t\t%u\n", this); - } else if ((this || optAll) && - (fn_len = next_add-fn_add) != 0) { + } else if ((this || optAll) + && (fn_len = next_add-fn_add) != 0 + ) { if (optVerbose) printf("%016llx %-40s %6i %8.4f\n", fn_add, fn_name, this, this/(double)fn_len);