added qse_tio_writembs() and qse_tio_readmbs()
This commit is contained in:
@ -133,7 +133,6 @@ struct qse_fio_t
|
||||
* in sio.c. make sure that you update the static instantiation
|
||||
* when you change the structure of qse_fio_t */
|
||||
QSE_DEFINE_COMMON_FIELDS (fio)
|
||||
int errnum;
|
||||
qse_fio_hnd_t handle;
|
||||
int flags; /* extra flags */
|
||||
qse_tio_t* tio;
|
||||
@ -147,7 +146,6 @@ struct qse_fio_lck_t
|
||||
qse_fio_ori_t origin; /* origin */
|
||||
};
|
||||
|
||||
#define QSE_FIO_ERRNUM(fio) ((fio)->errnum)
|
||||
#define QSE_FIO_HANDLE(fio) ((fio)->handle)
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -40,6 +40,7 @@ enum qse_pio_oflag_t
|
||||
/** enable text based I/O. */
|
||||
QSE_PIO_TEXT = (1 << 0),
|
||||
QSE_PIO_IGNOREMBWCERR = (1 << 1),
|
||||
QSE_PIO_NOAUTOFLUSH = (1 << 2),
|
||||
|
||||
/** execute the command via a system shell
|
||||
* (/bin/sh on *nix, cmd.exe on windows) */
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include <qse/cmn/fio.h>
|
||||
#include <qse/cmn/tio.h>
|
||||
|
||||
enum qse_sio_open_flag_t
|
||||
enum qse_sio_oflag_t
|
||||
{
|
||||
QSE_SIO_HANDLE = QSE_FIO_HANDLE,
|
||||
QSE_SIO_TEMPORARY = QSE_FIO_TEMPORARY,
|
||||
@ -60,6 +60,15 @@ enum qse_sio_open_flag_t
|
||||
QSE_SIO_NOAUTOFLUSH = (1 << 31)
|
||||
};
|
||||
|
||||
typedef qse_tio_errnum_t qse_sio_errnum_t;
|
||||
#define QSE_SIO_ENOERR QSE_TIO_ENOERR
|
||||
#define QSE_SIO_ENOMEM QSE_TIO_ENOMEM
|
||||
#define QSE_SIO_ENOSPC QSE_TIO_ENOSPC
|
||||
#define QSE_SIO_EILSEQ QSE_TIO_EILSEQ
|
||||
#define QSE_SIO_EICSEQ QSE_TIO_EICSEQ
|
||||
#define QSE_SIO_EILCHR QSE_TIO_EILCHR
|
||||
#define QSE_SIO_ERRNUM(sio) QSE_TIO_ERRNUM(&((sio)->tio))
|
||||
|
||||
typedef qse_fio_off_t qse_sio_pos_t;
|
||||
typedef qse_fio_hnd_t qse_sio_hnd_t;
|
||||
typedef qse_fio_std_t qse_sio_std_t;
|
||||
@ -76,9 +85,9 @@ typedef struct qse_sio_t qse_sio_t;
|
||||
|
||||
struct qse_sio_t
|
||||
{
|
||||
qse_mmgr_t* mmgr;
|
||||
qse_fio_t fio;
|
||||
qse_tio_t tio;
|
||||
QSE_DEFINE_COMMON_FIELDS (tio)
|
||||
qse_fio_t fio;
|
||||
qse_tio_t tio;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -100,14 +109,14 @@ qse_sio_t* qse_sio_open (
|
||||
qse_mmgr_t* mmgr, /**< memory manager */
|
||||
qse_size_t xtnsize, /**< extension size in bytes */
|
||||
const qse_char_t* file, /**< file name */
|
||||
int flags /**< number OR'ed of #qse_sio_open_flag_t */
|
||||
int oflags /**< number OR'ed of #qse_sio_oflag_t */
|
||||
);
|
||||
|
||||
qse_sio_t* qse_sio_openstd (
|
||||
qse_mmgr_t* mmgr, /**< memory manager */
|
||||
qse_size_t xtnsize, /**< extension size in bytes */
|
||||
qse_sio_std_t std, /**< standard I/O identifier */
|
||||
int flags /**< number OR'ed of #qse_sio_open_flag_t */
|
||||
int oflags /**< number OR'ed of #qse_sio_oflag_t */
|
||||
);
|
||||
|
||||
/**
|
||||
@ -135,7 +144,11 @@ void qse_sio_fini (
|
||||
qse_sio_t* sio
|
||||
);
|
||||
|
||||
qse_fio_hnd_t qse_sio_gethandle (
|
||||
qse_sio_errnum_t qse_sio_geterrnum (
|
||||
qse_sio_t* sio
|
||||
);
|
||||
|
||||
qse_sio_hnd_t qse_sio_gethandle (
|
||||
qse_sio_t* sio
|
||||
);
|
||||
|
||||
@ -147,57 +160,91 @@ void qse_sio_purge (
|
||||
qse_sio_t* sio
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_getc (
|
||||
qse_sio_t* sio,
|
||||
qse_char_t* c
|
||||
qse_ssize_t qse_sio_getmc (
|
||||
qse_sio_t* sio,
|
||||
qse_mchar_t* c
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_gets (
|
||||
qse_sio_t* sio,
|
||||
qse_char_t* buf,
|
||||
qse_size_t size
|
||||
qse_ssize_t qse_sio_getwc (
|
||||
qse_sio_t* sio,
|
||||
qse_wchar_t* c
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_getsn (
|
||||
qse_sio_t* sio,
|
||||
qse_char_t* buf,
|
||||
qse_size_t size
|
||||
qse_ssize_t qse_sio_getmbs (
|
||||
qse_sio_t* sio,
|
||||
qse_mchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putc (
|
||||
qse_sio_t* sio,
|
||||
qse_char_t c
|
||||
qse_ssize_t qse_sio_getmbsn (
|
||||
qse_sio_t* sio,
|
||||
qse_mchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putms (
|
||||
qse_ssize_t qse_sio_getwcs (
|
||||
qse_sio_t* sio,
|
||||
qse_wchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_getwcsn (
|
||||
qse_sio_t* sio,
|
||||
qse_wchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
# define qse_sio_getc(sio,c) qse_sio_getmb(sio,c)
|
||||
# define qse_sio_getstr(sio,buf,size) qse_sio_getmbs(sio,buf,size)
|
||||
# define qse_sio_getstrn(sio,buf,size) qse_sio_getmbsn(sio,buf,size)
|
||||
#else
|
||||
# define qse_sio_getc(sio,c) qse_sio_getwc(sio,c)
|
||||
# define qse_sio_getstr(sio,buf,size) qse_sio_getwcs(sio,buf,size)
|
||||
# define qse_sio_getstrn(sio,buf,size) qse_sio_getwcsn(sio,buf,size)
|
||||
#endif
|
||||
|
||||
qse_ssize_t qse_sio_putmb (
|
||||
qse_sio_t* sio,
|
||||
qse_mchar_t c
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putwc (
|
||||
qse_sio_t* sio,
|
||||
qse_wchar_t c
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putmbs (
|
||||
qse_sio_t* sio,
|
||||
const qse_mchar_t* str
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putws (
|
||||
qse_ssize_t qse_sio_putwcs (
|
||||
qse_sio_t* sio,
|
||||
const qse_wchar_t* str
|
||||
);
|
||||
|
||||
|
||||
qse_ssize_t qse_sio_putmsn (
|
||||
qse_ssize_t qse_sio_putmbsn (
|
||||
qse_sio_t* sio,
|
||||
const qse_mchar_t* str,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_sio_putwsn (
|
||||
qse_ssize_t qse_sio_putwcsn (
|
||||
qse_sio_t* sio,
|
||||
const qse_wchar_t* str,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
# define qse_sio_puts(sio,str) qse_sio_putms(sio,str)
|
||||
# define qse_sio_putsn(sio,str,size) qse_sio_putmsn(sio,str,size)
|
||||
# define qse_sio_putc(sio,c) qse_sio_putmb(sio,c)
|
||||
# define qse_sio_putstr(sio,str) qse_sio_putmbs(sio,str)
|
||||
# define qse_sio_putstrn(sio,str,size) qse_sio_putmbsn(sio,str,size)
|
||||
#else
|
||||
# define qse_sio_puts(sio,str) qse_sio_putws(sio,str)
|
||||
# define qse_sio_putsn(sio,str,size) qse_sio_putwsn(sio,str,size)
|
||||
# define qse_sio_putc(sio,c) qse_sio_putwc(sio,c)
|
||||
# define qse_sio_putstr(sio,str) qse_sio_putwcs(sio,str)
|
||||
# define qse_sio_putstrn(sio,str,size) qse_sio_putwcsn(sio,str,size)
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -57,7 +57,8 @@ enum
|
||||
* (i.e. 6 for utf8)
|
||||
*/
|
||||
QSE_TIO_MAX_INBUF_LEN = 4096,
|
||||
QSE_TIO_MAX_OUTBUF_LEN = 4096
|
||||
QSE_TIO_MAX_OUTBUF_LEN = 4096,
|
||||
QSE_TIO_MAX_INWBUF_LEN = 1024
|
||||
};
|
||||
|
||||
enum qse_tio_cmd_t
|
||||
@ -97,7 +98,7 @@ struct qse_tio_t
|
||||
{
|
||||
QSE_DEFINE_COMMON_FIELDS (tio)
|
||||
qse_tio_errnum_t errnum;
|
||||
int flags;
|
||||
int flags;
|
||||
|
||||
/* io functions */
|
||||
qse_tio_io_t input_func;
|
||||
@ -106,21 +107,16 @@ struct qse_tio_t
|
||||
void* output_arg;
|
||||
|
||||
/* for housekeeping */
|
||||
int input_status;
|
||||
qse_size_t inbuf_curp;
|
||||
qse_size_t inbuf_len;
|
||||
qse_size_t outbuf_len;
|
||||
int input_status;
|
||||
qse_size_t inbuf_cur;
|
||||
qse_size_t inbuf_len;
|
||||
qse_size_t outbuf_len;
|
||||
qse_size_t inwbuf_cur;
|
||||
qse_size_t inwbuf_len;
|
||||
|
||||
qse_mchar_t inbuf[QSE_TIO_MAX_INBUF_LEN];
|
||||
qse_mchar_t outbuf[QSE_TIO_MAX_OUTBUF_LEN];
|
||||
|
||||
#ifdef QSE_CHAR_IS_WCHAR
|
||||
struct
|
||||
{
|
||||
qse_mbstate_t in;
|
||||
qse_mbstate_t out;
|
||||
} mbstate;
|
||||
#endif
|
||||
qse_wchar_t inwbuf[QSE_TIO_MAX_INWBUF_LEN];
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -133,9 +129,9 @@ QSE_DEFINE_COMMON_FUNCTIONS (tio)
|
||||
* The qse_tio_open() function creates an text stream processoor.
|
||||
*/
|
||||
qse_tio_t* qse_tio_open (
|
||||
qse_mmgr_t* mmgr,
|
||||
qse_size_t xtnsize,
|
||||
int flags
|
||||
qse_mmgr_t* mmgr, /**< memory manager */
|
||||
qse_size_t xtnsize, /**< extension size in bytes */
|
||||
int flags /**< ORed of qse_tio_flag_t enumerators */
|
||||
);
|
||||
|
||||
/**
|
||||
@ -228,38 +224,64 @@ void qse_tio_purge (
|
||||
qse_tio_t* tio
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_tio_read() functio reads text.
|
||||
*/
|
||||
qse_ssize_t qse_tio_read (
|
||||
qse_tio_t* tio,
|
||||
qse_char_t* buf,
|
||||
qse_size_t size
|
||||
qse_ssize_t qse_tio_readmbs (
|
||||
qse_tio_t* tio,
|
||||
qse_mchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_tio_readwcs (
|
||||
qse_tio_t* tio,
|
||||
qse_wchar_t* buf,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_tio_write() function writes text.
|
||||
* If the size paramenter is (qse_size_t)-1, the function treats the data
|
||||
* parameter as a pointer to a null-terminated string.
|
||||
* The qse_tio_read() macro is character-type neutral. It maps
|
||||
* to qse_tio_readmbs() or qse_tio_readwcs().
|
||||
*/
|
||||
qse_ssize_t qse_tio_write (
|
||||
qse_tio_t* tio,
|
||||
const qse_char_t* data,
|
||||
qse_size_t size
|
||||
);
|
||||
#ifdef QSE_CHAR_IS_MCHAR
|
||||
# define qse_tio_read(tio,buf,size) qse_tio_readmbs(tio,buf,size)
|
||||
#else
|
||||
# define qse_tio_read(tio,buf,size) qse_tio_readwcs(tio,buf,size)
|
||||
#endif
|
||||
|
||||
qse_ssize_t qse_tio_writembsn (
|
||||
/**
|
||||
* The qse_tio_writembs() function writes the @a size characters
|
||||
* from a multibyte string @a str. If @a size is (qse_size_t)-1,
|
||||
* it writes on until a terminating null is found. It doesn't
|
||||
* write more than QSE_TYPE_MAX(qse_ssize_t) characters.
|
||||
* @return number of characters written on success, -1 on failure.
|
||||
*/
|
||||
qse_ssize_t qse_tio_writembs (
|
||||
qse_tio_t* tio,
|
||||
const qse_mchar_t* data,
|
||||
const qse_mchar_t* str,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
qse_ssize_t qse_tio_writewcsn (
|
||||
/**
|
||||
* The qse_tio_writembs() function writes the @a size characters
|
||||
* from a wide-character string @a str. If @a size is (qse_size_t)-1,
|
||||
* it writes on until a terminating null is found. It doesn't write
|
||||
* more than QSE_TYPE_MAX(qse_ssize_t) characters.
|
||||
* @return number of characters written on success, -1 on failure.
|
||||
*/
|
||||
qse_ssize_t qse_tio_writewcs (
|
||||
qse_tio_t* tio,
|
||||
const qse_wchar_t* data,
|
||||
const qse_wchar_t* str,
|
||||
qse_size_t size
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_tio_write() macro is character-type neutral. It maps
|
||||
* to qse_tio_writembs() or qse_tio_writewcs().
|
||||
*/
|
||||
#ifdef QSE_CHAR_IS_MCHAR
|
||||
# define qse_tio_write(tio,str,size) qse_tio_writembs(tio,str,size)
|
||||
#else
|
||||
# define qse_tio_write(tio,str,size) qse_tio_writewcs(tio,str,size)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user