X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=include%2Flibbb.h;h=fb7296f25fe0f79489cbb4853274cc59122f8318;hb=f125b6d341b06fda5412b82d23e486100e107eaa;hp=9f7c2603157d83ed948d1843719b99c59a6e975c;hpb=90a9904e9ef5f2fb70e1952cb1a68bd9213bcde3;p=oweals%2Fbusybox.git diff --git a/include/libbb.h b/include/libbb.h index 9f7c26031..fb7296f25 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -286,7 +286,9 @@ enum { ACTION_DEPTHFIRST = (1 << 3), /*ACTION_REVERSE = (1 << 4), - unused */ ACTION_QUIET = (1 << 5), + ACTION_DANGLING_OK = (1 << 6), }; +typedef uint8_t recurse_flags_t; extern int recursive_action(const char *fileName, unsigned flags, int FAST_FUNC (*fileAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), int FAST_FUNC (*dirAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), @@ -629,6 +631,9 @@ extern void xwrite(int fd, const void *buf, size_t count) FAST_FUNC; extern void xwrite_str(int fd, const char *str) FAST_FUNC; extern void xopen_xwrite_close(const char* file, const char *str) FAST_FUNC; +/* Close fd, but check for failures (some types of write errors) */ +extern void xclose(int fd) FAST_FUNC; + /* Reads and prints to stdout till eof, then closes FILE. Exits on error: */ extern void xprint_and_close_file(FILE *file) FAST_FUNC; @@ -686,12 +691,19 @@ char *itoa_to_buf(int n, char *buf, unsigned buflen) FAST_FUNC; /* Intelligent formatters of bignums */ void smart_ulltoa4(unsigned long long ul, char buf[5], const char *scale) FAST_FUNC; void smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale) FAST_FUNC; +/* If block_size == 0, display size without fractional part, + * else display (size * block_size) with one decimal digit. + * If display_unit == 0, add suffix (K,M,G...), + * else divide by display_unit and do not use suffix. */ //TODO: provide pointer to buf (avoid statics)? const char *make_human_readable_str(unsigned long long size, unsigned long block_size, unsigned long display_unit) FAST_FUNC; /* Put a string of hex bytes ("1b2e66fe"...), return advanced pointer */ char *bin2hex(char *buf, const char *cp, int count) FAST_FUNC; +/* Generate a UUID */ +void generate_uuid(uint8_t *buf) FAST_FUNC; + /* Last element is marked by mult == 0 */ struct suffix_mult { char suffix[4]; @@ -1174,7 +1186,7 @@ unsigned long long bb_makedev(unsigned int major, unsigned int minor) FAST_FUNC; /* "Keycodes" that report an escape sequence. * We use something which fits into signed char, - * yet doesn't represent any valid Unicode characher. + * yet doesn't represent any valid Unicode character. * Also, -1 is reserved for error indication and we don't use it. */ enum { KEYCODE_UP = -2, @@ -1259,6 +1271,7 @@ line_input_t *new_line_input_t(int flags) FAST_FUNC; */ int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state) FAST_FUNC; #else +#define MAX_HISTORY 0 int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC; #define read_line_input(prompt, command, maxsize, state) \ read_line_input(prompt, command, maxsize) @@ -1275,6 +1288,7 @@ enum { COMM_LEN = 16 }; #endif typedef struct procps_status_t { DIR *dir; + IF_FEATURE_SHOW_THREADS(DIR *task_dir;) uint8_t shift_pages_to_bytes; uint8_t shift_pages_to_kb; /* Fields are set to 0/NULL if failed to determine (or not requested) */ @@ -1343,11 +1357,12 @@ enum { || ENABLE_PIDOF || ENABLE_SESTATUS ), - IF_SELINUX(PSSCAN_CONTEXT = 1 << 17,) + PSSCAN_CONTEXT = (1 << 17) * ENABLE_SELINUX, PSSCAN_START_TIME = 1 << 18, PSSCAN_CPU = (1 << 19) * ENABLE_FEATURE_TOP_SMP_PROCESS, PSSCAN_NICE = (1 << 20) * ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS, PSSCAN_RUIDGID = (1 << 21) * ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS, + PSSCAN_TASKS = (1 << 22) * ENABLE_FEATURE_SHOW_THREADS, /* These are all retrieved from proc/NN/stat in one go: */ PSSCAN_STAT = PSSCAN_PPID | PSSCAN_PGID | PSSCAN_SID /**/ | PSSCAN_COMM | PSSCAN_STATE @@ -1359,9 +1374,9 @@ enum { //procps_status_t* alloc_procps_scan(void) FAST_FUNC; void free_procps_scan(procps_status_t* sp) FAST_FUNC; procps_status_t* procps_scan(procps_status_t* sp, int flags) FAST_FUNC; -/* Format cmdline (up to col chars) into char buf[col+1] */ +/* Format cmdline (up to col chars) into char buf[size] */ /* Puts [comm] if cmdline is empty (-> process is a kernel thread) */ -void read_cmdline(char *buf, int col, unsigned pid, const char *comm) FAST_FUNC; +void read_cmdline(char *buf, int size, unsigned pid, const char *comm) FAST_FUNC; pid_t *find_pid_by_name(const char* procName) FAST_FUNC; pid_t *pidlist_reverse(pid_t *pidList) FAST_FUNC; @@ -1561,7 +1576,6 @@ extern const char bb_default_login_shell[]; #undef islower #undef isprint #undef ispunct -#undef isspace #undef isupper #undef isxdigit @@ -1569,6 +1583,16 @@ extern const char bb_default_login_shell[]; #undef isdigit #define isdigit(a) ((unsigned)((a) - '0') <= 9) +/* This one is more efficient too! ~200 bytes */ +/* In POSIX/C locale (the only locale we care about: do we REALLY want + * to allow Unicode whitespace in, say, .conf files? nuts!) + * isspace is only these chars: "\t\n\v\f\r" and space. + * "\t\n\v\f\r" happen to have ASCII codes 9,10,11,12,13. + * Use that. + */ +#undef isspace +#define isspace(a) ({ unsigned char bb__isspace = (a) - 9; bb__isspace == (' ' - 9) || bb__isspace <= (13 - 9); }) + #define ARRAY_SIZE(x) ((unsigned)(sizeof(x) / sizeof((x)[0])))