diff --git a/qse/cmd/sed/sed.c b/qse/cmd/sed/sed.c index 8e5fab11..2d5f5757 100644 --- a/qse/cmd/sed/sed.c +++ b/qse/cmd/sed/sed.c @@ -67,7 +67,7 @@ static qse_ssize_t in ( qse_sed_getmmgr(sed), 0, file, - QSE_SIO_READ + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR ); if (arg->handle == QSE_NULL) return -1; @@ -107,7 +107,8 @@ static qse_ssize_t out ( arg->path, QSE_SIO_WRITE | QSE_SIO_CREATE | - QSE_SIO_TRUNCATE + QSE_SIO_TRUNCATE | + QSE_SIO_IGNOREMBWCERR ); if (arg->handle == QSE_NULL) return -1; @@ -247,7 +248,11 @@ qse_char_t* load_script_file (qse_sed_t* sed, const qse_char_t* file) fp = qse_sio_open ( qse_sed_getmmgr(sed), 0, file, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); - if (fp == QSE_NULL) return QSE_NULL; + if (fp == QSE_NULL) + { + qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot open %s\n"), file); + return QSE_NULL; + } if (qse_str_init (&script, QSE_MMGR_GETDFL(), 1024) <= -1) { diff --git a/qse/lib/cmn/sio.c b/qse/lib/cmn/sio.c index 9d89a63b..b3e23597 100644 --- a/qse/lib/cmn/sio.c +++ b/qse/lib/cmn/sio.c @@ -1,5 +1,5 @@ /* - * $Id: sio.c 565 2011-09-11 02:48:21Z hyunghwan.chung $ + * $Id: sio.c 566 2011-09-11 12:44:56Z hyunghwan.chung $ * Copyright 2006-2011 Chung, Hyung-Hwan. This file is part of QSE. @@ -56,7 +56,7 @@ static qse_sio_t __sio_in = { QSE_NULL, 0, - 0, + QSE_TIO_IGNOREMBWCERR, __sio_input, __sio_output, @@ -98,7 +98,7 @@ static qse_sio_t __sio_out = { QSE_NULL, 0, - 0, + QSE_TIO_IGNOREMBWCERR, __sio_input, __sio_output, @@ -140,7 +140,7 @@ static qse_sio_t __sio_err = { QSE_NULL, 0, - 0, + QSE_TIO_IGNOREMBWCERR, __sio_input, __sio_output, diff --git a/qse/lib/cmn/tio-get.c b/qse/lib/cmn/tio-get.c index 3320ecb3..26a92af9 100644 --- a/qse/lib/cmn/tio-get.c +++ b/qse/lib/cmn/tio-get.c @@ -1,5 +1,5 @@ /* - * $Id: tio-get.c 565 2011-09-11 02:48:21Z hyunghwan.chung $ + * $Id: tio-get.c 566 2011-09-11 12:44:56Z hyunghwan.chung $ * Copyright 2006-2011 Chung, Hyung-Hwan. This file is part of QSE. @@ -55,7 +55,8 @@ static qse_ssize_t tio_getc (qse_tio_t* tio, qse_char_t* c) &tio->inbuf[left], QSE_COUNTOF(tio->inbuf)-left); if (n == 0) { - if (tio->inbuf_curp < tio->inbuf_len) + if (tio->inbuf_curp < tio->inbuf_len && + !(tio->flags & QSE_TIO_IGNOREMBWCERR)) { /* gargage left in the buffer */ tio->errnum = QSE_TIO_EICSEQ; @@ -86,7 +87,9 @@ static qse_ssize_t tio_getc (qse_tio_t* tio, qse_char_t* c) /* illegal sequence */ if (tio->flags & QSE_TIO_IGNOREMBWCERR) { - *c = tio->inbuf[tio->inbuf_curp++]; + /* *c = tio->inbuf[tio->inbuf_curp++]; */ + *c = QSE_WT('?'); + tio->inbuf_curp++; return 1; } diff --git a/qse/lib/cmn/tio-put.c b/qse/lib/cmn/tio-put.c index 0fa674e9..6b13daba 100644 --- a/qse/lib/cmn/tio-put.c +++ b/qse/lib/cmn/tio-put.c @@ -1,5 +1,5 @@ /* - * $Id: tio-put.c 565 2011-09-11 02:48:21Z hyunghwan.chung $ + * $Id: tio-put.c 566 2011-09-11 12:44:56Z hyunghwan.chung $ * Copyright 2006-2011 Chung, Hyung-Hwan. This file is part of QSE. @@ -62,6 +62,7 @@ static qse_ssize_t tio_putc (qse_tio_t* tio, qse_char_t c, int* flush_needed) } else if (n > QSE_COUNTOF(mc)) { + if (tio->flags & QSE_TIO_IGNOREMBWCERR) return 1; tio->errnum = QSE_TIO_ENOSPC; return -1; } diff --git a/qse/lib/sed/sed.c b/qse/lib/sed/sed.c index 89a75694..b0053e9d 100644 --- a/qse/lib/sed/sed.c +++ b/qse/lib/sed/sed.c @@ -1,5 +1,5 @@ /* - * $Id: sed.c 564 2011-09-10 16:14:38Z hyunghwan.chung $ + * $Id: sed.c 566 2011-09-11 12:44:56Z hyunghwan.chung $ * Copyright 2006-2011 Chung, Hyung-Hwan. This file is part of QSE. @@ -145,7 +145,6 @@ int qse_sed_getoption (qse_sed_t* sed) return sed->option; } - #ifdef USE_REX qse_size_t qse_sed_getmaxdepth (qse_sed_t* sed, qse_sed_depth_t id) { @@ -1015,60 +1014,6 @@ static int get_subst (qse_sed_t* sed, qse_sed_cmd_t* cmd) if (pickup_rex (sed, delim, 1, cmd, t[0]) <= -1) goto oops; if (pickup_rex (sed, delim, 0, cmd, t[1]) <= -1) goto oops; -#if 0 -/* calling pickup_rex twice above instead of commenting out this part */ - for (i = 0; i < 2; i++) - { - c = NXTSC (sed); - - while (c != delim) - { - CHECK_CMDIC (sed, cmd, c, goto oops); - - if (c == QSE_T('\\')) - { - qse_cint_t nc; - - nc = NXTSC (sed); - CHECK_CMDIC_ESCAPED (sed, cmd, nc, goto oops); - - if (nc == QSE_T('\n')) c = nc; - else - { - qse_cint_t ec; - - /* Escaping a known speical character for the regular expression - * part is done here. However, Escaping a special character for - * the replacement part is done in do_subst() except '\n' because - * it has more special characters like '&'. */ - - ec = trans_escaped (nc); - if (ec == nc) - { - /* if the character after a backslash is not special at the - * this layer, add the backslash into the regular expression - * buffer as it is. */ - if (qse_str_ccat (t[i], QSE_T('\\')) == (qse_size_t)-1) - { - SETERR0 (sed, QSE_SED_ENOMEM, QSE_NULL); - goto oops; - } - } - - c = ec; - } - } - - if (qse_str_ccat (t[i], c) == (qse_size_t)-1) - { - SETERR0 (sed, QSE_SED_ENOMEM, QSE_NULL); - goto oops; - } - - c = NXTSC (sed); - } - } -#endif /* skip spaces before options */ do { c = NXTSC(sed); } while (IS_SPACE(c)); diff --git a/qse/lib/sed/std.c b/qse/lib/sed/std.c index 066fa7f7..9e2a44e5 100644 --- a/qse/lib/sed/std.c +++ b/qse/lib/sed/std.c @@ -84,7 +84,7 @@ static qse_ssize_t xin ( sed->mmgr, 0, xtn->infile, - QSE_SIO_READ + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR ); if (sio == QSE_NULL) { @@ -105,7 +105,7 @@ static qse_ssize_t xin ( sed->mmgr, 0, arg->path, - QSE_SIO_READ + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR ); } @@ -167,7 +167,8 @@ static qse_ssize_t xout ( xtn->outfile, QSE_SIO_WRITE | QSE_SIO_CREATE | - QSE_SIO_TRUNCATE + QSE_SIO_TRUNCATE | + QSE_SIO_IGNOREMBWCERR ); if (sio == QSE_NULL) { @@ -190,7 +191,8 @@ static qse_ssize_t xout ( arg->path, QSE_SIO_WRITE | QSE_SIO_CREATE | - QSE_SIO_TRUNCATE + QSE_SIO_TRUNCATE | + QSE_SIO_IGNOREMBWCERR ); }