chiark / gitweb /
shared: utf8 - support ucs4 -> utf8
[elogind.git] / src / libsystemd-terminal / term-screen.c
index f2ac5c92c423f3bc1399839cd34d0676fb2f3f50..0e38ff41c63f5b5278979a5109620ab1e7b5be49 100644 (file)
@@ -51,6 +51,7 @@
 #include "macro.h"
 #include "term-internal.h"
 #include "util.h"
+#include "utf8.h"
 
 int term_screen_new(term_screen **out, term_screen_write_fn write_fn, void *write_fn_data, term_screen_cmd_fn cmd_fn, void *cmd_fn_data) {
         _cleanup_(term_screen_unrefp) term_screen *screen = NULL;
@@ -402,6 +403,8 @@ static void screen_mode_change_ansi(term_screen *screen, unsigned mode, bool set
                 set_reset(screen, TERM_FLAG_NEWLINE_MODE, set);
 
                 break;
+        default:
+                log_debug("terminal: failed to %s unknown ANSI mode %u", set ? "set" : "unset", mode);
         }
 }
 
@@ -499,6 +502,8 @@ static void screen_mode_change_dec(term_screen *screen, unsigned int mode, bool
                         screen_restore_state(screen, &screen->saved_alt);
 
                 break;
+        default:
+                log_debug("terminal: failed to %s unknown DEC mode %u", set ? "set" : "unset", mode);
         }
 }
 
@@ -545,7 +550,6 @@ static int screen_LF(term_screen *screen, const term_seq *seq);
 
 static int screen_GRAPHIC(term_screen *screen, const term_seq *seq) {
         term_char_t ch = TERM_CHAR_NULL;
-        uint32_t c;
 
         if (screen->state.cursor_x + 1 == screen->page->width
             && screen->flags & TERM_FLAG_PENDING_WRAP
@@ -556,8 +560,7 @@ static int screen_GRAPHIC(term_screen *screen, const term_seq *seq) {
 
         screen_cursor_clear_wrap(screen);
 
-        c = screen_map(screen, seq->terminator);
-        ch = term_char_merge(ch, screen_map(screen, c));
+        ch = term_char_merge(ch, screen_map(screen, seq->terminator));
         term_page_write(screen->page, screen->state.cursor_x, screen->state.cursor_y, ch, 1, &screen->state.attr, screen->age, false);
 
         if (screen->state.cursor_x + 1 == screen->page->width)
@@ -3182,7 +3185,7 @@ static int screen_TBC(term_screen *screen, const term_seq *seq) {
                 break;
         case 3:
                 if (screen->page->width > 0)
-                        memset(screen->tabs, 0, (screen->page->width + 7) / 8);
+                        memzero(screen->tabs, (screen->page->width + 7) / 8);
                 break;
         }
 
@@ -4105,7 +4108,7 @@ static char *screen_map_key(term_screen *screen,
 
         /* map unicode keys */
         for (i = 0; i < n_syms; ++i)
-                p += term_utf8_encode(p, ucs4[i]);
+                p += utf8_encode_unichar(p, ucs4[i]);
 
         return p;
 }