/****************************************************************************
- * Copyright (c) 2003-2004,2005 Free Software Foundation, Inc. *
+ * Copyright 2020 Thomas E. Dickey *
+ * Copyright 2003-2011,2016 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 *
#include <wctype.h>
#endif
-MODULE_ID("$Id: lib_slk_wset.c,v 1.11 2005/01/16 01:03:53 tom Exp $")
+MODULE_ID("$Id: lib_slk_wset.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
NCURSES_EXPORT(int)
slk_wset(int i, const wchar_t *astr, int format)
{
int result = ERR;
- size_t arglen;
const wchar_t *str;
- char *mystr;
mbstate_t state;
T((T_CALLED("slk_wset(%d, %s, %d)"), i, _nc_viswbuf(astr), format));
- init_mb(state);
- str = astr;
- if ((arglen = wcsrtombs(NULL, &str, 0, &state)) != (size_t) -1) {
- if ((mystr = (char *) _nc_doalloc(0, arglen + 1)) != 0) {
- str = astr;
- if (wcsrtombs(mystr, &str, arglen, &state) != (size_t) -1) {
- /* glibc documentation claims that the terminating L'\0'
- * is written, but it is not...
- */
- mystr[arglen] = 0;
- result = slk_set(i, mystr, format);
+ if (astr != 0) {
+ size_t arglen;
+
+ init_mb(state);
+ str = astr;
+
+ if ((arglen = wcsrtombs(NULL, &str, (size_t) 0, &state)) != (size_t) -1) {
+ char *mystr;
+
+ if ((mystr = (char *) _nc_doalloc(0, arglen + 1)) != 0) {
+ str = astr;
+ if (wcsrtombs(mystr, &str, arglen, &state) != (size_t) -1) {
+ /* glibc documentation claims that the terminating L'\0'
+ * is written, but it is not...
+ */
+ mystr[arglen] = 0;
+ result = slk_set(i, mystr, format);
+ }
+ free(mystr);
}
- free(mystr);
}
}
returnCode(result);