From d8528b8e56bab7643722e4453121882d23c23c07 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 31 Jan 2010 05:15:38 +0100 Subject: ls: unicode fixes Signed-off-by: Denys Vlasenko --- include/libbb.h | 19 ++++++++++++++----- include/unicode.h | 5 ----- 2 files changed, 14 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/libbb.h b/include/libbb.h index 73aea409e..a86d64400 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -577,11 +577,6 @@ char *strncpy_IFNAMSIZ(char *dst, const char *src) FAST_FUNC; * But potentially slow, don't use in one-billion-times loops */ int bb_putchar(int ch) FAST_FUNC; char *xasprintf(const char *format, ...) __attribute__ ((format(printf, 1, 2))) FAST_FUNC RETURNS_MALLOC; -/* Prints unprintable chars ch as ^C or M-c to file - * (M-c is used only if ch is ORed with PRINTABLE_META), - * else it is printed as-is (except for ch = 0x9b) */ -enum { PRINTABLE_META = 0x100 }; -void fputc_printable(int ch, FILE *file) FAST_FUNC; // gcc-4.1.1 still isn't good enough at optimizing it // (+200 bytes compared to macro) //static ALWAYS_INLINE @@ -594,6 +589,20 @@ void fputc_printable(int ch, FILE *file) FAST_FUNC; #define NOT_LONE_CHAR(s,c) ((s)[0] != (c) || (s)[1]) #define DOT_OR_DOTDOT(s) ((s)[0] == '.' && (!(s)[1] || ((s)[1] == '.' && !(s)[2]))) +typedef struct uni_stat_t { + unsigned byte_count; + unsigned unicode_count; + unsigned unicode_width; +} uni_stat_t; +/* Returns a string with unprintable chars replaced by '?' or + * SUBST_WCHAR. This function is unicode-aware. */ +const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str); +/* Prints unprintable char ch as ^C or M-c to file + * (M-c is used only if ch is ORed with PRINTABLE_META), + * else it is printed as-is (except for ch = 0x9b) */ +enum { PRINTABLE_META = 0x100 }; +void fputc_printable(int ch, FILE *file) FAST_FUNC; + /* dmalloc will redefine these to it's own implementation. It is safe * to have the prototypes here unconditionally. */ void *malloc_or_warn(size_t size) FAST_FUNC RETURNS_MALLOC; diff --git a/include/unicode.h b/include/unicode.h index f32e56599..25ef7407e 100644 --- a/include/unicode.h +++ b/include/unicode.h @@ -23,11 +23,6 @@ size_t FAST_FUNC unicode_strlen(const char *string); enum { UNI_FLAG_PAD = (1 << 0), }; -typedef struct uni_stat_t { - unsigned byte_count; - unsigned unicode_count; - unsigned unicode_width; -} uni_stat_t; //UNUSED: unsigned FAST_FUNC unicode_padding_to_width(unsigned width, const char *src); //UNUSED: char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char *src, unsigned width, int flags); char* FAST_FUNC unicode_conv_to_printable(uni_stat_t *stats, const char *src); -- cgit v1.2.3