sed: open input files sequentially to avoid EMFILE
[oweals/busybox.git] / libbb / printable.c
index 676758a2b8070853104c399dffd5e63c020b849d..9a423431e64a9d71ace87ccd1fb2c2df454131d9 100644 (file)
@@ -4,12 +4,12 @@
  *
  * Copyright (C) 2007 Denys Vlasenko
  *
- * Licensed under GPL version 2, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2, see file LICENSE in this source tree.
  */
 
 #include "libbb.h"
 
-void fputc_printable(int ch, FILE *file)
+void FAST_FUNC fputc_printable(int ch, FILE *file)
 {
        if ((ch & (0x80 + PRINTABLE_META)) == (0x80 + PRINTABLE_META)) {
                fputs("M-", file);
@@ -32,3 +32,27 @@ void fputc_printable(int ch, FILE *file)
        }
        fputc(ch, file);
 }
+
+void FAST_FUNC visible(unsigned ch, char *buf, int flags)
+{
+       if (ch == '\t' && !(flags & VISIBLE_SHOW_TABS)) {
+               goto raw;
+       }
+       if (ch == '\n') {
+               if (flags & VISIBLE_ENDLINE)
+                       *buf++ = '$';
+       } else {
+               if (ch >= 128) {
+                       ch -= 128;
+                       *buf++ = 'M';
+                       *buf++ = '-';
+               }
+               if (ch < 32 || ch == 127) {
+                       *buf++ = '^';
+                       ch ^= 0x40;
+               }
+       }
+ raw:
+       *buf++ = ch;
+       *buf = '\0';
+}