added QSE_TIO_IGNOREMBWCERR
This commit is contained in:
parent
00e15a42e9
commit
e2affec43b
@ -237,43 +237,51 @@ static int handle_args (int argc, qse_char_t* argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_char_t* load_script_file (const qse_char_t* file)
|
qse_char_t* load_script_file (qse_sed_t* sed, const qse_char_t* file)
|
||||||
{
|
{
|
||||||
qse_cint_t c;
|
|
||||||
qse_str_t script;
|
qse_str_t script;
|
||||||
QSE_FILE* fp;
|
qse_sio_t* fp;
|
||||||
qse_xstr_t xstr;
|
qse_xstr_t xstr;
|
||||||
|
qse_char_t buf[256];
|
||||||
|
|
||||||
fp = qse_fopen (file, QSE_T("r"));
|
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) return QSE_NULL;
|
||||||
|
|
||||||
if (qse_str_init (&script, QSE_MMGR_GETDFL(), 1024) <= -1)
|
if (qse_str_init (&script, QSE_MMGR_GETDFL(), 1024) <= -1)
|
||||||
{
|
{
|
||||||
qse_fclose (fp);
|
qse_sio_close (fp);
|
||||||
qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot load %s\n"), file);
|
qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot load %s\n"), file);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((c = qse_fgetc (fp)) != QSE_CHAR_EOF)
|
while (1)
|
||||||
{
|
{
|
||||||
if (qse_str_ccat (&script, c) == (qse_size_t)-1)
|
qse_ssize_t n;
|
||||||
|
|
||||||
|
n = qse_sio_gets (fp, buf, QSE_COUNTOF(buf));
|
||||||
|
if (n == 0) break;
|
||||||
|
if (n <= -1)
|
||||||
{
|
{
|
||||||
|
qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot read %s\n"), file);
|
||||||
qse_str_fini (&script);
|
qse_str_fini (&script);
|
||||||
qse_fclose (fp);
|
qse_sio_close (fp);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qse_str_ncat (&script, buf, n) == (qse_size_t)-1)
|
||||||
|
{
|
||||||
|
qse_fprintf (QSE_STDERR, QSE_T("ERROR: out of memory\n"));
|
||||||
|
qse_str_fini (&script);
|
||||||
|
qse_sio_close (fp);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (qse_ferror(fp))
|
|
||||||
{
|
|
||||||
qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot read %s\n"), file);
|
|
||||||
qse_str_fini (&script);
|
|
||||||
qse_fclose (fp);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
qse_str_yield (&script, &xstr, 0);
|
qse_str_yield (&script, &xstr, 0);
|
||||||
qse_str_fini (&script);
|
qse_str_fini (&script);
|
||||||
qse_fclose (fp);
|
qse_sio_close (fp);
|
||||||
|
|
||||||
return xstr.ptr;
|
return xstr.ptr;
|
||||||
}
|
}
|
||||||
@ -314,7 +322,7 @@ int sed_main (int argc, qse_char_t* argv[])
|
|||||||
{
|
{
|
||||||
QSE_ASSERT (g_script == QSE_NULL);
|
QSE_ASSERT (g_script == QSE_NULL);
|
||||||
|
|
||||||
g_script = load_script_file (g_script_file);
|
g_script = load_script_file (sed, g_script_file);
|
||||||
if (g_script == QSE_NULL) goto oops;
|
if (g_script == QSE_NULL) goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: fio.h 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: fio.h 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -33,10 +33,11 @@
|
|||||||
enum qse_fio_open_flag_t
|
enum qse_fio_open_flag_t
|
||||||
{
|
{
|
||||||
/* request qse_char_io based IO */
|
/* request qse_char_io based IO */
|
||||||
QSE_FIO_TEXT = (1 << 0),
|
QSE_FIO_TEXT = (1 << 0),
|
||||||
|
QSE_FIO_IGNOREMBWCERR = (1 << 1),
|
||||||
|
|
||||||
/* treat the file name pointer as a handle pointer */
|
/* treat the file name pointer as a handle pointer */
|
||||||
QSE_FIO_HANDLE = (1 << 1),
|
QSE_FIO_HANDLE = (1 << 3),
|
||||||
|
|
||||||
QSE_FIO_READ = (1 << 8),
|
QSE_FIO_READ = (1 << 8),
|
||||||
QSE_FIO_WRITE = (1 << 9),
|
QSE_FIO_WRITE = (1 << 9),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: pio.h 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: pio.h 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -38,15 +38,16 @@
|
|||||||
enum qse_pio_oflag_t
|
enum qse_pio_oflag_t
|
||||||
{
|
{
|
||||||
/** enable text based I/O. */
|
/** enable text based I/O. */
|
||||||
QSE_PIO_TEXT = (1 << 0),
|
QSE_PIO_TEXT = (1 << 0),
|
||||||
|
QSE_PIO_IGNOREMBWCERR = (1 << 1),
|
||||||
|
|
||||||
/** execute the command via a system shell
|
/** execute the command via a system shell
|
||||||
* (/bin/sh on *nix, cmd.exe on windows) */
|
* (/bin/sh on *nix, cmd.exe on windows) */
|
||||||
QSE_PIO_SHELL = (1 << 1),
|
QSE_PIO_SHELL = (1 << 3),
|
||||||
|
|
||||||
/** indicate that the command to qse_pio_open() is a multi-byte string.
|
/** indicate that the command to qse_pio_open() is a multi-byte string.
|
||||||
* it is useful if #QSE_CHAR_IS_WCHAR is defined. */
|
* it is useful if #QSE_CHAR_IS_WCHAR is defined. */
|
||||||
QSE_PIO_MBSCMD = (1 << 2),
|
QSE_PIO_MBSCMD = (1 << 4),
|
||||||
|
|
||||||
/** write to stdin of a child process */
|
/** write to stdin of a child process */
|
||||||
QSE_PIO_WRITEIN = (1 << 8),
|
QSE_PIO_WRITEIN = (1 << 8),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sio.h 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: sio.h 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -32,19 +32,20 @@
|
|||||||
|
|
||||||
enum qse_sio_open_flag_t
|
enum qse_sio_open_flag_t
|
||||||
{
|
{
|
||||||
QSE_SIO_HANDLE = QSE_FIO_HANDLE,
|
QSE_SIO_HANDLE = QSE_FIO_HANDLE,
|
||||||
|
QSE_SIO_IGNOREMBWCERR = QSE_FIO_IGNOREMBWCERR,
|
||||||
|
|
||||||
QSE_SIO_READ = QSE_FIO_READ,
|
QSE_SIO_READ = QSE_FIO_READ,
|
||||||
QSE_SIO_WRITE = QSE_FIO_WRITE,
|
QSE_SIO_WRITE = QSE_FIO_WRITE,
|
||||||
QSE_SIO_APPEND = QSE_FIO_APPEND,
|
QSE_SIO_APPEND = QSE_FIO_APPEND,
|
||||||
|
|
||||||
QSE_SIO_CREATE = QSE_FIO_CREATE,
|
QSE_SIO_CREATE = QSE_FIO_CREATE,
|
||||||
QSE_SIO_TRUNCATE = QSE_FIO_TRUNCATE,
|
QSE_SIO_TRUNCATE = QSE_FIO_TRUNCATE,
|
||||||
QSE_SIO_EXCLUSIVE = QSE_FIO_EXCLUSIVE,
|
QSE_SIO_EXCLUSIVE = QSE_FIO_EXCLUSIVE,
|
||||||
QSE_SIO_SYNC = QSE_FIO_SYNC,
|
QSE_SIO_SYNC = QSE_FIO_SYNC,
|
||||||
|
|
||||||
QSE_SIO_NOSHRD = QSE_FIO_NOSHRD,
|
QSE_SIO_NOSHRD = QSE_FIO_NOSHRD,
|
||||||
QSE_SIO_NOSHWR = QSE_FIO_NOSHWR
|
QSE_SIO_NOSHWR = QSE_FIO_NOSHWR
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef qse_fio_off_t qse_sio_pos_t;
|
typedef qse_fio_off_t qse_sio_pos_t;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tio.h 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: tio.h 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -60,12 +60,18 @@ enum
|
|||||||
QSE_TIO_MAX_OUTBUF_LEN = 4096
|
QSE_TIO_MAX_OUTBUF_LEN = 4096
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum qse_tio_cmd_t
|
||||||
{
|
{
|
||||||
QSE_TIO_IO_OPEN,
|
QSE_TIO_IO_OPEN,
|
||||||
QSE_TIO_IO_CLOSE,
|
QSE_TIO_IO_CLOSE,
|
||||||
QSE_TIO_IO_DATA
|
QSE_TIO_IO_DATA
|
||||||
};
|
};
|
||||||
|
typedef enum qse_tio_cmd_t qse_tio_cmd_t;
|
||||||
|
|
||||||
|
enum qse_tio_flag_t
|
||||||
|
{
|
||||||
|
QSE_TIO_IGNOREMBWCERR = (1 << 0)
|
||||||
|
};
|
||||||
|
|
||||||
#define QSE_TIO_ERRNUM(tio) ((const qse_tio_errnum_t)(tio)->errnum)
|
#define QSE_TIO_ERRNUM(tio) ((const qse_tio_errnum_t)(tio)->errnum)
|
||||||
|
|
||||||
@ -75,10 +81,10 @@ typedef struct qse_tio_t qse_tio_t;
|
|||||||
* The qse_tio_io_t types define a text I/O handler.
|
* The qse_tio_io_t types define a text I/O handler.
|
||||||
*/
|
*/
|
||||||
typedef qse_ssize_t (*qse_tio_io_t) (
|
typedef qse_ssize_t (*qse_tio_io_t) (
|
||||||
int cmd,
|
qse_tio_cmd_t cmd,
|
||||||
void* arg,
|
void* arg,
|
||||||
void* data,
|
void* data,
|
||||||
qse_size_t size
|
qse_size_t size
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,6 +96,7 @@ struct qse_tio_t
|
|||||||
{
|
{
|
||||||
QSE_DEFINE_COMMON_FIELDS (tio)
|
QSE_DEFINE_COMMON_FIELDS (tio)
|
||||||
qse_tio_errnum_t errnum;
|
qse_tio_errnum_t errnum;
|
||||||
|
int flags;
|
||||||
|
|
||||||
/* io functions */
|
/* io functions */
|
||||||
qse_tio_io_t input_func;
|
qse_tio_io_t input_func;
|
||||||
@ -126,7 +133,8 @@ QSE_DEFINE_COMMON_FUNCTIONS (tio)
|
|||||||
*/
|
*/
|
||||||
qse_tio_t* qse_tio_open (
|
qse_tio_t* qse_tio_open (
|
||||||
qse_mmgr_t* mmgr,
|
qse_mmgr_t* mmgr,
|
||||||
qse_size_t xtnsize
|
qse_size_t xtnsize,
|
||||||
|
int flags
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -142,7 +150,8 @@ int qse_tio_close (
|
|||||||
*/
|
*/
|
||||||
int qse_tio_init (
|
int qse_tio_init (
|
||||||
qse_tio_t* tio,
|
qse_tio_t* tio,
|
||||||
qse_mmgr_t* mmgr
|
qse_mmgr_t* mmgr,
|
||||||
|
int flags
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: fio.c 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: fio.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -45,8 +45,8 @@
|
|||||||
|
|
||||||
QSE_IMPLEMENT_COMMON_FUNCTIONS (fio)
|
QSE_IMPLEMENT_COMMON_FUNCTIONS (fio)
|
||||||
|
|
||||||
static qse_ssize_t fio_input (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t fio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
static qse_ssize_t fio_output (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t fio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
|
|
||||||
qse_fio_t* qse_fio_open (
|
qse_fio_t* qse_fio_open (
|
||||||
qse_mmgr_t* mmgr, qse_size_t ext,
|
qse_mmgr_t* mmgr, qse_size_t ext,
|
||||||
@ -365,8 +365,11 @@ int qse_fio_init (
|
|||||||
if (flags & QSE_FIO_TEXT)
|
if (flags & QSE_FIO_TEXT)
|
||||||
{
|
{
|
||||||
qse_tio_t* tio;
|
qse_tio_t* tio;
|
||||||
|
int opt = 0;
|
||||||
|
|
||||||
tio = qse_tio_open (fio->mmgr, 0);
|
if (fio->flags & QSE_FIO_IGNOREMBWCERR) opt |= QSE_TIO_IGNOREMBWCERR;
|
||||||
|
|
||||||
|
tio = qse_tio_open (fio->mmgr, 0, opt);
|
||||||
if (tio == QSE_NULL) QSE_THROW_ERR (tio);
|
if (tio == QSE_NULL) QSE_THROW_ERR (tio);
|
||||||
|
|
||||||
if (qse_tio_attachin (tio, fio_input, fio) <= -1 ||
|
if (qse_tio_attachin (tio, fio_input, fio) <= -1 ||
|
||||||
@ -826,7 +829,7 @@ int qse_fio_unlock (qse_fio_t* fio, qse_fio_lck_t* lck, int flags)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_ssize_t fio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t fio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_fio_t* fio = (qse_fio_t*)arg;
|
qse_fio_t* fio = (qse_fio_t*)arg;
|
||||||
QSE_ASSERT (fio != QSE_NULL);
|
QSE_ASSERT (fio != QSE_NULL);
|
||||||
@ -838,7 +841,7 @@ static qse_ssize_t fio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_ssize_t fio_output (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t fio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_fio_t* fio = (qse_fio_t*)arg;
|
qse_fio_t* fio = (qse_fio_t*)arg;
|
||||||
QSE_ASSERT (fio != QSE_NULL);
|
QSE_ASSERT (fio != QSE_NULL);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: pio.c 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: pio.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -40,8 +40,8 @@
|
|||||||
|
|
||||||
QSE_IMPLEMENT_COMMON_FUNCTIONS (pio)
|
QSE_IMPLEMENT_COMMON_FUNCTIONS (pio)
|
||||||
|
|
||||||
static qse_ssize_t pio_input (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t pio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
static qse_ssize_t pio_output (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t pio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
|
|
||||||
qse_pio_t* qse_pio_open (
|
qse_pio_t* qse_pio_open (
|
||||||
qse_mmgr_t* mmgr, qse_size_t ext,
|
qse_mmgr_t* mmgr, qse_size_t ext,
|
||||||
@ -999,11 +999,15 @@ int qse_pio_init (
|
|||||||
|
|
||||||
if (oflags & QSE_PIO_TEXT)
|
if (oflags & QSE_PIO_TEXT)
|
||||||
{
|
{
|
||||||
|
int topt = 0;
|
||||||
|
|
||||||
|
if (oflags & QSE_PIO_IGNOREMBWCERR) topt |= QSE_TIO_IGNOREMBWCERR;
|
||||||
|
|
||||||
for (i = 0; i < QSE_COUNTOF(tio); i++)
|
for (i = 0; i < QSE_COUNTOF(tio); i++)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
tio[i] = qse_tio_open (pio->mmgr, 0);
|
tio[i] = qse_tio_open (pio->mmgr, 0, topt);
|
||||||
if (tio[i] == QSE_NULL)
|
if (tio[i] == QSE_NULL)
|
||||||
{
|
{
|
||||||
pio->errnum = QSE_PIO_ENOMEM;
|
pio->errnum = QSE_PIO_ENOMEM;
|
||||||
@ -1565,7 +1569,7 @@ int qse_pio_kill (qse_pio_t* pio)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_ssize_t pio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t pio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_pio_pin_t* pin = (qse_pio_pin_t*)arg;
|
qse_pio_pin_t* pin = (qse_pio_pin_t*)arg;
|
||||||
QSE_ASSERT (pin != QSE_NULL);
|
QSE_ASSERT (pin != QSE_NULL);
|
||||||
@ -1580,7 +1584,7 @@ static qse_ssize_t pio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_ssize_t pio_output (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t pio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_pio_pin_t* pin = (qse_pio_pin_t*)arg;
|
qse_pio_pin_t* pin = (qse_pio_pin_t*)arg;
|
||||||
QSE_ASSERT (pin != QSE_NULL);
|
QSE_ASSERT (pin != QSE_NULL);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sio.c 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: sio.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#include <qse/cmn/sio.h>
|
#include <qse/cmn/sio.h>
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
|
|
||||||
static qse_ssize_t __sio_input (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t __sio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
static qse_ssize_t __sio_output (int cmd, void* arg, void* buf, qse_size_t size);
|
static qse_ssize_t __sio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size);
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
@ -56,6 +56,7 @@ static qse_sio_t __sio_in =
|
|||||||
{
|
{
|
||||||
QSE_NULL,
|
QSE_NULL,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
|
|
||||||
__sio_input,
|
__sio_input,
|
||||||
__sio_output,
|
__sio_output,
|
||||||
@ -97,6 +98,7 @@ static qse_sio_t __sio_out =
|
|||||||
{
|
{
|
||||||
QSE_NULL,
|
QSE_NULL,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
|
|
||||||
__sio_input,
|
__sio_input,
|
||||||
__sio_output,
|
__sio_output,
|
||||||
@ -138,6 +140,7 @@ static qse_sio_t __sio_err =
|
|||||||
{
|
{
|
||||||
QSE_NULL,
|
QSE_NULL,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
|
|
||||||
__sio_input,
|
__sio_input,
|
||||||
__sio_output,
|
__sio_output,
|
||||||
@ -195,6 +198,7 @@ int qse_sio_init (
|
|||||||
qse_sio_t* sio, qse_mmgr_t* mmgr, const qse_char_t* file, int flags)
|
qse_sio_t* sio, qse_mmgr_t* mmgr, const qse_char_t* file, int flags)
|
||||||
{
|
{
|
||||||
int mode;
|
int mode;
|
||||||
|
int topt = 0;
|
||||||
|
|
||||||
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
|
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
|
||||||
|
|
||||||
@ -206,7 +210,9 @@ int qse_sio_init (
|
|||||||
|
|
||||||
if (qse_fio_init (&sio->fio, mmgr, file, flags, mode) <= -1) return -1;
|
if (qse_fio_init (&sio->fio, mmgr, file, flags, mode) <= -1) return -1;
|
||||||
|
|
||||||
if (qse_tio_init(&sio->tio, mmgr) <= -1)
|
if (flags & QSE_SIO_IGNOREMBWCERR) topt |= QSE_TIO_IGNOREMBWCERR;
|
||||||
|
|
||||||
|
if (qse_tio_init(&sio->tio, mmgr, topt) <= -1)
|
||||||
{
|
{
|
||||||
qse_fio_fini (&sio->fio);
|
qse_fio_fini (&sio->fio);
|
||||||
return -1;
|
return -1;
|
||||||
@ -329,7 +335,7 @@ int qse_sio_seek (qse_sio_t* sio, qse_sio_seek_t pos)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static qse_ssize_t __sio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t __sio_input (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_sio_t* sio = (qse_sio_t*)arg;
|
qse_sio_t* sio = (qse_sio_t*)arg;
|
||||||
|
|
||||||
@ -358,7 +364,7 @@ static qse_ssize_t __sio_input (int cmd, void* arg, void* buf, qse_size_t size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_ssize_t __sio_output (int cmd, void* arg, void* buf, qse_size_t size)
|
static qse_ssize_t __sio_output (qse_tio_cmd_t cmd, void* arg, void* buf, qse_size_t size)
|
||||||
{
|
{
|
||||||
qse_sio_t* sio = (qse_sio_t*)arg;
|
qse_sio_t* sio = (qse_sio_t*)arg;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tio-get.c 556 2011-08-31 15:43:46Z hyunghwan.chung $
|
* $Id: tio-get.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -84,6 +84,12 @@ static qse_ssize_t tio_getc (qse_tio_t* tio, qse_char_t* c)
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
/* illegal sequence */
|
/* illegal sequence */
|
||||||
|
if (tio->flags & QSE_TIO_IGNOREMBWCERR)
|
||||||
|
{
|
||||||
|
*c = tio->inbuf[tio->inbuf_curp++];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
tio->inbuf_curp++; /* skip one byte */
|
tio->inbuf_curp++; /* skip one byte */
|
||||||
tio->errnum = QSE_TIO_EILSEQ;
|
tio->errnum = QSE_TIO_EILSEQ;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tio-put.c 559 2011-09-04 16:21:54Z hyunghwan.chung $
|
* $Id: tio-put.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -51,6 +51,12 @@ static qse_ssize_t tio_putc (qse_tio_t* tio, qse_char_t c, int* flush_needed)
|
|||||||
n = qse_wcrtomb (c, mc, QSE_COUNTOF(mc), &tio->mbstate.out);
|
n = qse_wcrtomb (c, mc, QSE_COUNTOF(mc), &tio->mbstate.out);
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
|
if (tio->flags & QSE_TIO_IGNOREMBWCERR)
|
||||||
|
{
|
||||||
|
/* return 1 as if c has been written successfully */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
tio->errnum = QSE_TIO_EILCHR;
|
tio->errnum = QSE_TIO_EILCHR;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tio.c 559 2011-09-04 16:21:54Z hyunghwan.chung $
|
* $Id: tio.c 565 2011-09-11 02:48:21Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2011 Chung, Hyung-Hwan.
|
Copyright 2006-2011 Chung, Hyung-Hwan.
|
||||||
This file is part of QSE.
|
This file is part of QSE.
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
QSE_IMPLEMENT_COMMON_FUNCTIONS (tio)
|
QSE_IMPLEMENT_COMMON_FUNCTIONS (tio)
|
||||||
|
|
||||||
qse_tio_t* qse_tio_open (qse_mmgr_t* mmgr, qse_size_t xtnsize)
|
qse_tio_t* qse_tio_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, int flags)
|
||||||
{
|
{
|
||||||
qse_tio_t* tio;
|
qse_tio_t* tio;
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ qse_tio_t* qse_tio_open (qse_mmgr_t* mmgr, qse_size_t xtnsize)
|
|||||||
tio = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_tio_t) + xtnsize);
|
tio = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_tio_t) + xtnsize);
|
||||||
if (tio == QSE_NULL) return QSE_NULL;
|
if (tio == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (qse_tio_init (tio, mmgr) <= -1)
|
if (qse_tio_init (tio, mmgr, flags) <= -1)
|
||||||
{
|
{
|
||||||
QSE_MMGR_FREE (mmgr, tio);
|
QSE_MMGR_FREE (mmgr, tio);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
@ -56,13 +56,14 @@ int qse_tio_close (qse_tio_t* tio)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qse_tio_init (qse_tio_t* tio, qse_mmgr_t* mmgr)
|
int qse_tio_init (qse_tio_t* tio, qse_mmgr_t* mmgr, int flags)
|
||||||
{
|
{
|
||||||
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
|
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
|
||||||
|
|
||||||
QSE_MEMSET (tio, 0, QSE_SIZEOF(*tio));
|
QSE_MEMSET (tio, 0, QSE_SIZEOF(*tio));
|
||||||
|
|
||||||
tio->mmgr = mmgr;
|
tio->mmgr = mmgr;
|
||||||
|
tio->flags = flags;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
tio->input_func = QSE_NULL;
|
tio->input_func = QSE_NULL;
|
||||||
@ -77,7 +78,6 @@ int qse_tio_init (qse_tio_t* tio, qse_mmgr_t* mmgr)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
tio->errnum = QSE_TIO_ENOERR;
|
tio->errnum = QSE_TIO_ENOERR;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user