From 84eb18092f577a82a0a533a7d681e0a7ad4ba297 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sat, 8 Oct 2011 22:41:52 +0000 Subject: [PATCH] fixed a minor bug in calling qse_sed_setcompid() from sed/std.c --- qse/lib/awk/std.c | 47 ++++++++++++++++++++++++++++++----------------- qse/lib/sed/sed.c | 2 ++ qse/lib/sed/std.c | 32 +++++++++++++++++++++----------- 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/qse/lib/awk/std.c b/qse/lib/awk/std.c index c9ba29d9..7ce80ffb 100644 --- a/qse/lib/awk/std.c +++ b/qse/lib/awk/std.c @@ -336,28 +336,28 @@ static qse_sio_t* open_sio_rtx (qse_awk_rtx_t* rtx, const qse_char_t* file, int return sio; } -static const qse_char_t* std_names[] = +static const qse_char_t* sio_std_names[] = { QSE_T("stdin"), QSE_T("stdout"), QSE_T("stderr"), }; -static qse_sio_t* open_sio_std (qse_awk_t* awk, int std, int flags) +static qse_sio_t* open_sio_std (qse_awk_t* awk, qse_sio_std_t std, int flags) { qse_sio_t* sio; sio = qse_sio_openstd (awk->mmgr, 0, std, flags); if (sio == QSE_NULL) { qse_cstr_t ea; - ea.ptr = std_names[std]; - ea.len = qse_strlen (std_names[std]); + ea.ptr = sio_std_names[std]; + ea.len = qse_strlen (sio_std_names[std]); qse_awk_seterrnum (awk, QSE_AWK_EOPEN, &ea); } return sio; } -static qse_sio_t* open_sio_std_rtx (qse_awk_rtx_t* rtx, int std, int flags) +static qse_sio_t* open_sio_std_rtx (qse_awk_rtx_t* rtx, qse_sio_std_t std, int flags) { qse_sio_t* sio; @@ -365,8 +365,8 @@ static qse_sio_t* open_sio_std_rtx (qse_awk_rtx_t* rtx, int std, int flags) if (sio == QSE_NULL) { qse_cstr_t ea; - ea.ptr = std_names[std]; - ea.len = qse_strlen (std_names[std]); + ea.ptr = sio_std_names[std]; + ea.len = qse_strlen (sio_std_names[std]); qse_awk_rtx_seterrnum (rtx, QSE_AWK_EOPEN, &ea); } return sio; @@ -388,7 +388,7 @@ static qse_ssize_t sf_in_open ( { /* special file name '-' */ xtn->s.in.handle = open_sio_std ( - awk, 0, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); + awk, QSE_SIO_STDIN, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); if (xtn->s.in.handle == QSE_NULL) return -1; } else @@ -412,7 +412,7 @@ static qse_ssize_t sf_in_open ( case QSE_AWK_PARSESTD_STDIO: xtn->s.in.handle = open_sio_std ( - awk, 0, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); + awk, QSE_SIO_STDIN, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); if (xtn->s.in.handle == QSE_NULL) return -1; return 1; @@ -604,7 +604,9 @@ static qse_ssize_t sf_out ( { /* special file name '-' */ xtn->s.out.handle = open_sio_std ( - awk, 1, QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR); + awk, QSE_SIO_STDOUT, + QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR + ); if (xtn->s.out.handle == QSE_NULL) return -1; } else @@ -620,7 +622,9 @@ static qse_ssize_t sf_out ( case QSE_AWK_PARSESTD_STDIO: xtn->s.out.handle = open_sio_std ( - awk, 1, QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR); + awk, QSE_SIO_STDOUT, + QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR + ); if (xtn->s.out.handle == QSE_NULL) return -1; return 1; @@ -997,7 +1001,9 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) if (rxtn->c.in.count == 0) { sio = open_sio_std_rtx ( - rtx, 0, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); + rtx, QSE_SIO_STDIN, + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR + ); if (sio == QSE_NULL) return -1; riod->handle = sio; @@ -1037,7 +1043,9 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) * { print $0; }' file1 file2 */ sio = open_sio_std_rtx ( - rtx, 0, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); + rtx, QSE_SIO_STDIN, + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR + ); if (sio == QSE_NULL) return -1; riod->handle = sio; @@ -1103,8 +1111,10 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) file = out.u.cpldup.ptr; sio = (file[0] == QSE_T('-') && file[1] == QSE_T('\0'))? - open_sio_std_rtx (rtx, 0, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR): - open_sio_rtx (rtx, file, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); + open_sio_std_rtx (rtx, QSE_SIO_STDIN, + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR): + open_sio_rtx (rtx, file, + QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR); if (sio == QSE_NULL) { qse_awk_rtx_freemem (rtx, out.u.cpldup.ptr); @@ -1138,7 +1148,9 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) if (rxtn->c.out.count == 0) { sio = open_sio_std_rtx ( - rtx, 1, QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR); + rtx, QSE_SIO_STDOUT, + QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR + ); if (sio == QSE_NULL) return -1; riod->handle = sio; @@ -1165,7 +1177,8 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) sio = (file[0] == QSE_T('-') && file[1] == QSE_T('\0'))? open_sio_std_rtx ( - rtx, 1, QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR): + rtx, QSE_SIO_STDOUT, + QSE_SIO_WRITE | QSE_SIO_IGNOREMBWCERR): open_sio_rtx ( rtx, file, QSE_SIO_WRITE | QSE_SIO_CREATE | diff --git a/qse/lib/sed/sed.c b/qse/lib/sed/sed.c index cb0b6cec..af2ef883 100644 --- a/qse/lib/sed/sed.c +++ b/qse/lib/sed/sed.c @@ -3653,6 +3653,8 @@ const qse_char_t* qse_sed_setcompid (qse_sed_t* sed, const qse_char_t* id) return (const qse_char_t*)(sed->src.cid + 1); } + if (id == QSE_NULL) id = QSE_T(""); + len = qse_strlen (id); cid = QSE_MMGR_ALLOC (sed->mmgr, QSE_SIZEOF(*cid) + ((len + 1) * QSE_SIZEOF(*id))); diff --git a/qse/lib/sed/std.c b/qse/lib/sed/std.c index f168bfec..d437cf04 100644 --- a/qse/lib/sed/std.c +++ b/qse/lib/sed/std.c @@ -161,22 +161,23 @@ static qse_sio_t* open_sio (qse_sed_t* sed, const qse_char_t* file, int flags) return sio; } +static const qse_char_t* sio_std_names[] = +{ + QSE_T("stdin"), + QSE_T("stdout"), + QSE_T("stderr"), +}; + static qse_sio_t* open_sio_std (qse_sed_t* sed, qse_sio_std_t std, int flags) { qse_sio_t* sio; - static const qse_char_t* std_names[] = - { - QSE_T("stdin"), - QSE_T("stdout"), - QSE_T("stderr"), - }; sio = qse_sio_openstd (sed->mmgr, 0, std, flags); if (sio == QSE_NULL) { qse_cstr_t ea; - ea.ptr = std_names[std]; - ea.len = qse_strlen (std_names[std]); + ea.ptr = sio_std_names[std]; + ea.len = qse_strlen (sio_std_names[std]); qse_sed_seterrnum (sed, QSE_SED_EIOFIL, &ea); } return sio; @@ -231,15 +232,24 @@ static int open_input_stream ( /* reset script location */ if (io->type == QSE_SED_IOSTD_FILE) { - qse_sed_setcompid (sed, io->u.file); + qse_sed_setcompid ( + sed, + ((io->u.file == QSE_NULL)? + sio_std_names[QSE_SIO_STDIN]: io->u.file) + ); } else { qse_char_t buf[64]; + + /* format an identifier to be something like M#1, S#5 */ buf[0] = (io->type == QSE_SED_IOSTD_MEM)? QSE_T('M'): QSE_T('S'); buf[1] = QSE_T('#'); - if (int_to_str (io - xtn->s.in.ptr, &buf[2], QSE_COUNTOF(buf) - 2) >= 0) - qse_sed_setcompid (sed, buf); + int_to_str (io - xtn->s.in.ptr, &buf[2], QSE_COUNTOF(buf) - 2); + + /* don't care about failure int_to_str() though it's not + * likely to happen */ + qse_sed_setcompid (sed, buf); } sed->src.loc.line = 1; sed->src.loc.colm = 1;