From 55cf0a663723f6334b94de297776756b487c2cdf Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Thu, 22 Apr 2004 17:27:05 +0000 Subject: 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] --- error.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'error.c') 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 *); -- cgit v1.1