]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/widechar/charable.c
ncurses 6.2 - patch 20210424
[ncurses.git] / ncurses / widechar / charable.c
index 7e7dfe675b22b30854db928c38ea43a0318efd4f..55d4890c8366fd72875f16028ee447a5cda15002 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 2003 Free Software Foundation, Inc.                        *
+ * Copyright 2018,2020 Thomas E. Dickey                                     *
+ * Copyright 2003-2005,2008 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 
 #include <curses.priv.h>
 
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: charable.c,v 1.2 2003/07/05 18:04:08 tom Exp $")
+MODULE_ID("$Id: charable.c,v 1.8 2020/02/02 23:34:34 tom Exp $")
 
 NCURSES_EXPORT(bool) _nc_is_charable(wchar_t ch)
 {
     bool result;
 #if HAVE_WCTOB
 
 NCURSES_EXPORT(bool) _nc_is_charable(wchar_t ch)
 {
     bool result;
 #if HAVE_WCTOB
-    result = (wctob(ch) == ch);
+    result = (wctob((wint_t) ch) == (int) ch);
 #else
     result = (_nc_to_char(ch) >= 0);
 #endif
 #else
     result = (_nc_to_char(ch) >= 0);
 #endif
@@ -57,6 +58,8 @@ NCURSES_EXPORT(int) _nc_to_char(wint_t ch)
        result = UChar(temp[0]);
     else
        result = -1;
        result = UChar(temp[0]);
     else
        result = -1;
+#else
+#error expected either wctob/wctomb
 #endif
     return result;
 }
 #endif
     return result;
 }
@@ -67,11 +70,16 @@ NCURSES_EXPORT(wint_t) _nc_to_widechar(int ch)
 #if HAVE_BTOWC
     result = btowc(ch);
 #elif HAVE_MBTOWC
 #if HAVE_BTOWC
     result = btowc(ch);
 #elif HAVE_MBTOWC
+    wchar_t convert;
     char temp[2];
     temp[0] = ch;
     temp[1] = '\0';
     char temp[2];
     temp[0] = ch;
     temp[1] = '\0';
-    if (mbtowc((wchar_t *) (&result), temp, 1) != 1)
+    if (mbtowc(&convert, temp, 1) >= 0)
+       result = convert;
+    else
        result = WEOF;
        result = WEOF;
+#else
+#error expected either btowc/mbtowc
 #endif
     return result;
 }
 #endif
     return result;
 }