summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-04-22 17:27:05 +0000
committerSimon Tatham <anakin@pobox.com>2004-04-22 17:27:05 +0000
commit55cf0a663723f6334b94de297776756b487c2cdf (patch)
tree0ce89f99734e930c9324211811c6ecef915bebe3 /error.c
parent2dfa498f92369018c3bbc1527df8cce5778fc6ae (diff)
downloadhalibut-55cf0a663723f6334b94de297776756b487c2cdf.zip
halibut-55cf0a663723f6334b94de297776756b487c2cdf.tar.gz
halibut-55cf0a663723f6334b94de297776756b487c2cdf.tar.bz2
halibut-55cf0a663723f6334b94de297776756b487c2cdf.tar.xz
Support the locale-supplied character set where appropriate. It's
used for converting command-line -C directives into Unicode; it's used for outputting Unicode strings to stderr in error messages; and it's used as the default character set for input files (although I'd be inclined to recommend everyone use \cfg{input-charset} in all their source files to ensure their portability). [originally from svn r4114]
Diffstat (limited to 'error.c')
-rw-r--r--error.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/error.c b/error.c
index abd8d61..42eea37 100644
--- a/error.c
+++ b/error.c
@@ -15,7 +15,6 @@
static void do_error(int code, va_list ap) {
char error[1024];
- char auxbuf[256];
char c;
char *sp, *sp2;
wchar_t *wsp;
@@ -82,18 +81,20 @@ static void do_error(int code, va_list ap) {
break;
case err_badparatype:
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
fpos = *va_arg(ap, filepos *);
sprintf(error, "command `%.200s' unrecognised at start of"
" paragraph", sp);
flags = FILEPOS;
+ sfree(sp);
break;
case err_badmidcmd:
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
fpos = *va_arg(ap, filepos *);
sprintf(error, "command `%.200s' unexpected in mid-paragraph", sp);
flags = FILEPOS;
+ sfree(sp);
break;
case err_unexbrace:
fpos = *va_arg(ap, filepos *);
@@ -138,23 +139,26 @@ static void do_error(int code, va_list ap) {
case err_nosuchkw:
fpos = *va_arg(ap, filepos *);
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
sprintf(error, "unable to resolve cross-reference to `%.200s'", sp);
flags = FILEPOS;
+ sfree(sp);
break;
case err_multiBR:
fpos = *va_arg(ap, filepos *);
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
sprintf(error, "multiple `\\BR' entries given for `%.200s'", sp);
flags = FILEPOS;
+ sfree(sp);
break;
case err_nosuchidxtag:
+ fpos = *va_arg(ap, filepos *);
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
sprintf(error, "`\\IM' on unknown index tag `%.200s'", sp);
- flags = 0;
- /* FIXME: need to get a filepos to here somehow */
+ sfree(sp);
+ flags = FILEPOS;
break;
case err_cantopenw:
sp = va_arg(ap, char *);
@@ -164,9 +168,10 @@ static void do_error(int code, va_list ap) {
case err_macroexists:
fpos = *va_arg(ap, filepos *);
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
sprintf(error, "macro `%.200s' already defined", sp);
flags = FILEPOS;
+ sfree(sp);
break;
case err_sectjump:
fpos = *va_arg(ap, filepos *);
@@ -185,10 +190,11 @@ static void do_error(int code, va_list ap) {
fpos = *va_arg(ap, filepos *);
fpos2 = *va_arg(ap, filepos *);
wsp = va_arg(ap, wchar_t *);
- sp = ustrtoa(wsp, auxbuf, sizeof(auxbuf), CS_LOCAL);
+ sp = utoa_locale_dup(wsp);
sprintf(error, "paragraph keyword `%.200s' already defined at ", sp);
sprintf(error + strlen(error), "%s:%d", fpos2.filename, fpos2.line);
flags = FILEPOS;
+ sfree(sp);
break;
case err_misplacedlcont:
fpos = *va_arg(ap, filepos *);