summaryrefslogtreecommitdiff
path: root/ncurses/widechar/lib_cchar.c
diff options
context:
space:
mode:
Diffstat (limited to 'ncurses/widechar/lib_cchar.c')
-rw-r--r--ncurses/widechar/lib_cchar.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/ncurses/widechar/lib_cchar.c b/ncurses/widechar/lib_cchar.c
index c61c795..654bebb 100644
--- a/ncurses/widechar/lib_cchar.c
+++ b/ncurses/widechar/lib_cchar.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2001-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 2001-2012,2014 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 *
@@ -35,7 +35,7 @@
#include <curses.priv.h>
-MODULE_ID("$Id: lib_cchar.c,v 1.20 2010/12/25 23:46:26 tom Exp $")
+MODULE_ID("$Id: lib_cchar.c,v 1.27 2014/02/01 22:10:42 tom Exp $")
/*
* The SuSv2 description leaves some room for interpretation. We'll assume wch
@@ -47,7 +47,7 @@ NCURSES_EXPORT(int)
setcchar(cchar_t *wcval,
const wchar_t *wch,
const attr_t attrs,
- short color_pair,
+ NCURSES_PAIRS_T color_pair,
const void *opts)
{
unsigned i;
@@ -56,11 +56,11 @@ setcchar(cchar_t *wcval,
TR(TRACE_CCALLS, (T_CALLED("setcchar(%p,%s,%lu,%d,%p)"),
(void *) wcval, _nc_viswbuf(wch),
- (unsigned long) attrs, color_pair, opts));
+ (unsigned long) attrs, (int) color_pair, opts));
- len = (unsigned) wcslen(wch);
if (opts != NULL
- || (len > 1 && wcwidth(wch[0]) < 0)) {
+ || wch == NULL
+ || ((len = (unsigned) wcslen(wch)) > 1 && wcwidth(wch[0]) < 0)) {
code = ERR;
} else {
if (len > CCHARW_MAX)
@@ -80,7 +80,7 @@ setcchar(cchar_t *wcval,
memset(wcval, 0, sizeof(*wcval));
if (len != 0) {
- SetAttr(*wcval, attrs | (attr_t) ColorPair(color_pair));
+ SetAttr(*wcval, attrs);
SetPair(CHDEREF(wcval), color_pair);
memcpy(&wcval->chars, wch, len * sizeof(wchar_t));
TR(TRACE_CCALLS, ("copy %d wchars, first is %s", len,
@@ -96,7 +96,7 @@ NCURSES_EXPORT(int)
getcchar(const cchar_t *wcval,
wchar_t *wch,
attr_t *attrs,
- short *color_pair,
+ NCURSES_PAIRS_T *color_pair,
void *opts)
{
wchar_t *wp;
@@ -110,8 +110,8 @@ getcchar(const cchar_t *wcval,
(void *) color_pair,
opts));
- if (opts == NULL) {
- len = ((wp = wmemchr(wcval->chars, L'\0', CCHARW_MAX))
+ if (opts == NULL && wcval != NULL) {
+ len = ((wp = wmemchr(wcval->chars, L'\0', (size_t) CCHARW_MAX))
? (int) (wp - wcval->chars)
: CCHARW_MAX);
@@ -125,8 +125,8 @@ getcchar(const cchar_t *wcval,
code = ERR;
} else if (len >= 0) {
*attrs = AttrOf(*wcval) & A_ATTRIBUTES;
- *color_pair = (short) GetPair(*wcval);
- wmemcpy(wch, wcval->chars, (unsigned) len);
+ *color_pair = (NCURSES_PAIRS_T) GetPair(*wcval);
+ wmemcpy(wch, wcval->chars, (size_t) len);
wch[len] = L'\0';
code = OK;
}