*: use better isspace implementation
[oweals/busybox.git] / include / libbb.h
index 1694d2c2db4667a8a929e3b7f982076bc0224717..fb7296f25fe0f79489cbb4853274cc59122f8318 100644 (file)
@@ -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];
@@ -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)
@@ -1344,7 +1357,7 @@ 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,
@@ -1563,7 +1576,6 @@ extern const char bb_default_login_shell[];
 #undef islower
 #undef isprint
 #undef ispunct
-#undef isspace
 #undef isupper
 #undef isxdigit
 
@@ -1571,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])))