interim commit while writing qse_pio_t functions.
- enhanced qse_pio_init() to handle a wide character string. - added qse_wcsntombsnlen().
This commit is contained in:
@ -4,7 +4,7 @@ AM_CFLAGS = -I$(top_builddir)/include
|
||||
|
||||
lib_LTLIBRARIES = libqsecmn.la
|
||||
libqsecmn_la_SOURCES = mem.h chr.h \
|
||||
mem.c chr.c chr_cnv.c rex.c str_bas.c str_cnv.c str_dyn.c \
|
||||
mem.c chr.c chr_cnv.c rex.c str_bas.c str_cnv.c str_dyn.c str_utl.c \
|
||||
lda.c map.c sll.c dll.c opt.c \
|
||||
fio.c pio.c sio.c tio.c tio_get.c tio_put.c \
|
||||
time.c \
|
||||
|
@ -52,9 +52,9 @@ libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libqsecmn_la_DEPENDENCIES =
|
||||
am_libqsecmn_la_OBJECTS = mem.lo chr.lo chr_cnv.lo rex.lo str_bas.lo \
|
||||
str_cnv.lo str_dyn.lo lda.lo map.lo sll.lo dll.lo opt.lo \
|
||||
fio.lo pio.lo sio.lo tio.lo tio_get.lo tio_put.lo time.lo \
|
||||
misc.lo
|
||||
str_cnv.lo str_dyn.lo str_utl.lo lda.lo map.lo sll.lo dll.lo \
|
||||
opt.lo fio.lo pio.lo sio.lo tio.lo tio_get.lo tio_put.lo \
|
||||
time.lo misc.lo
|
||||
libqsecmn_la_OBJECTS = $(am_libqsecmn_la_OBJECTS)
|
||||
libqsecmn_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
@ -196,7 +196,7 @@ AUTOMAKE_OPTIONS = nostdinc
|
||||
AM_CFLAGS = -I$(top_builddir)/include
|
||||
lib_LTLIBRARIES = libqsecmn.la
|
||||
libqsecmn_la_SOURCES = mem.h chr.h \
|
||||
mem.c chr.c chr_cnv.c rex.c str_bas.c str_cnv.c str_dyn.c \
|
||||
mem.c chr.c chr_cnv.c rex.c str_bas.c str_cnv.c str_dyn.c str_utl.c \
|
||||
lda.c map.c sll.c dll.c opt.c \
|
||||
fio.c pio.c sio.c tio.c tio_get.c tio_put.c \
|
||||
time.c \
|
||||
@ -289,6 +289,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_bas.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_cnv.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_dyn.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_utl.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tio.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tio_get.Plo@am__quote@
|
||||
|
@ -34,7 +34,6 @@
|
||||
#define TOB(lda,len) ((len)*(lda)->scale)
|
||||
#define DPTR(node) ((node)->dptr)
|
||||
#define DLEN(node) ((node)->dlen)
|
||||
#define INVALID QSE_LDA_INVALID
|
||||
|
||||
static int comp_data (lda_t* lda,
|
||||
const void* dptr1, size_t dlen1,
|
||||
@ -308,7 +307,7 @@ size_t qse_lda_search (lda_t* lda, size_t pos, const void* dptr, size_t dlen)
|
||||
dptr, dlen) == 0) return i;
|
||||
}
|
||||
|
||||
return INVALID;
|
||||
return QSE_LDA_NIL;
|
||||
}
|
||||
|
||||
size_t qse_lda_rsearch (lda_t* lda, size_t pos, const void* dptr, size_t dlen)
|
||||
@ -329,7 +328,7 @@ size_t qse_lda_rsearch (lda_t* lda, size_t pos, const void* dptr, size_t dlen)
|
||||
}
|
||||
}
|
||||
|
||||
return INVALID;
|
||||
return QSE_LDA_NIL;
|
||||
}
|
||||
|
||||
size_t qse_lda_upsert (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
@ -345,7 +344,7 @@ size_t qse_lda_insert (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
|
||||
/* allocate the node first */
|
||||
node = alloc_node (lda, dptr, dlen);
|
||||
if (node == QSE_NULL) return INVALID;
|
||||
if (node == QSE_NULL) return QSE_LDA_NIL;
|
||||
|
||||
/* do resizeing if necessary.
|
||||
* resizing is performed after node allocation because that way, it
|
||||
@ -378,7 +377,7 @@ size_t qse_lda_insert (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
if (lda->freeer)
|
||||
lda->freeer (lda, DPTR(node), DLEN(node));
|
||||
QSE_MMGR_FREE (lda->mmgr, node);
|
||||
return INVALID;
|
||||
return QSE_LDA_NIL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,7 +387,7 @@ size_t qse_lda_insert (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
if (lda->freeer)
|
||||
lda->freeer (lda, DPTR(node), DLEN(node));
|
||||
QSE_MMGR_FREE (lda->mmgr, node);
|
||||
return INVALID;
|
||||
return QSE_LDA_NIL;
|
||||
}
|
||||
|
||||
/* fill in the gap with QSE_NULL */
|
||||
@ -410,14 +409,14 @@ size_t qse_lda_update (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
{
|
||||
node_t* c;
|
||||
|
||||
if (pos >= lda->size) return INVALID;
|
||||
if (pos >= lda->size) return QSE_LDA_NIL;
|
||||
|
||||
c = lda->node[pos];
|
||||
if (c == QSE_NULL)
|
||||
{
|
||||
/* no previous data */
|
||||
lda->node[pos] = alloc_node (lda, dptr, dlen);
|
||||
if (lda->node[pos] == QSE_NULL) return INVALID;
|
||||
if (lda->node[pos] == QSE_NULL) return QSE_LDA_NIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -430,7 +429,7 @@ size_t qse_lda_update (lda_t* lda, size_t pos, void* dptr, size_t dlen)
|
||||
{
|
||||
/* updated to different data */
|
||||
node_t* node = alloc_node (lda, dptr, dlen);
|
||||
if (node == QSE_NULL) return INVALID;
|
||||
if (node == QSE_NULL) return QSE_LDA_NIL;
|
||||
|
||||
if (lda->freeer != QSE_NULL)
|
||||
lda->freeer (lda, DPTR(c), DLEN(c));
|
||||
|
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <qse/cmn/pio.h>
|
||||
#include <qse/cmn/str.h>
|
||||
#include "mem.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
@ -67,7 +68,15 @@ qse_pio_t* qse_pio_init (
|
||||
qse_pio_t* pio, qse_mmgr_t* mmgr, const qse_char_t* cmd, int flags)
|
||||
{
|
||||
qse_pio_pid_t pid;
|
||||
qse_pio_hnd_t handle[6] = { -1, -1, -1, -1, -1, -1 };
|
||||
qse_pio_hnd_t handle[6] =
|
||||
{
|
||||
QSE_PIO_HND_NIL,
|
||||
QSE_PIO_HND_NIL,
|
||||
QSE_PIO_HND_NIL,
|
||||
QSE_PIO_HND_NIL,
|
||||
QSE_PIO_HND_NIL,
|
||||
QSE_PIO_HND_NIL
|
||||
};
|
||||
int i, minidx = -1, maxidx = -1;
|
||||
|
||||
QSE_ASSERT (QSE_COUNTOF(pio->hanlde) == QSE_COUNTOF(handle));
|
||||
@ -107,6 +116,14 @@ qse_pio_t* qse_pio_init (
|
||||
{
|
||||
/* child */
|
||||
qse_pio_hnd_t devnull;
|
||||
qse_mchar_t* mcmd;
|
||||
extern char** environ;
|
||||
int fcnt = 0;
|
||||
#ifndef QSE_CHAR_IS_MCHAR
|
||||
qse_size_t n, mn, wl;
|
||||
qse_char_t* wcmd = QSE_NULL;
|
||||
qse_mchar_t buf[64];
|
||||
#endif
|
||||
|
||||
if (flags & QSE_PIO_WRITEIN)
|
||||
{
|
||||
@ -171,40 +188,88 @@ qse_pio_t* qse_pio_init (
|
||||
if (flags & QSE_PIO_DROPOUT) QSE_CLOSE(1);
|
||||
if (flags & QSE_PIO_DROPERR) QSE_CLOSE(2);
|
||||
|
||||
#ifdef QSE_CHAR_IS_MCHAR
|
||||
if (flags & QSE_PIO_SHELL) mcmd = (qse_char_t*)cmd;
|
||||
else
|
||||
{
|
||||
mcmd = qse_strdup (cmd, pio->mmgr);
|
||||
if (mcmd == QSE_NULL) goto child_oops;
|
||||
|
||||
fcnt = qse_strspl (mcmd, QSE_T(""),
|
||||
QSE_T('\"'), QSE_T('\"'), QSE_T('\''));
|
||||
if (fcnt <= 0)
|
||||
{
|
||||
/* no field or an error */
|
||||
goto child_oops;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (flags & QSE_PIO_SHELL)
|
||||
{
|
||||
const qse_mchar_t* mcmd;
|
||||
qse_mchar_t* argv[4];
|
||||
extern char** environ;
|
||||
|
||||
#ifdef QSE_CHAR_IS_MCHAR
|
||||
mcmd = cmd;
|
||||
#else
|
||||
qse_size_t n, mn;
|
||||
qse_mchar_t buf[64];
|
||||
|
||||
n = qse_wcstombslen (cmd, &mn);
|
||||
n = qse_wcstombslen (cmd, &mn);
|
||||
if (cmd[n] != QSE_WT('\0'))
|
||||
{
|
||||
/* cmd has illegal sequence */
|
||||
goto child_oops;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wcmd = qse_strdup (cmd, pio->mmgr);
|
||||
if (wcmd == QSE_NULL) goto child_oops;
|
||||
|
||||
mn = mn + 1;
|
||||
|
||||
if (mn <= QSE_COUNTOF(buf))
|
||||
fcnt = qse_strspl (wcmd, QSE_T(""),
|
||||
QSE_T('\"'), QSE_T('\"'), QSE_T('\''));
|
||||
if (fcnt <= 0)
|
||||
{
|
||||
mcmd = buf;
|
||||
mn = QSE_COUNTOF(buf);
|
||||
/* no field or an error */
|
||||
goto child_oops;
|
||||
}
|
||||
else
|
||||
|
||||
for (wl = 0, n = fcnt; n > 0; )
|
||||
{
|
||||
mcmd = QSE_MMGR_ALLOC (
|
||||
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
|
||||
if (mcmd == QSE_NULL) goto child_oops;
|
||||
if (wcmd[wl++] == QSE_T('\0')) n--;
|
||||
}
|
||||
|
||||
n = qse_wcstombs (cmd, mcmd, &mn);
|
||||
n = qse_wcsntombsnlen (wcmd, wl, &mn);
|
||||
if (n != wl) goto child_oops;
|
||||
}
|
||||
|
||||
mn = mn + 1;
|
||||
|
||||
if (mn <= QSE_COUNTOF(buf))
|
||||
{
|
||||
mcmd = buf;
|
||||
mn = QSE_COUNTOF(buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
mcmd = QSE_MMGR_ALLOC (
|
||||
pio->mmgr, mn*QSE_SIZEOF(*mcmd));
|
||||
if (mcmd == QSE_NULL) goto child_oops;
|
||||
}
|
||||
|
||||
if (flags & QSE_PIO_SHELL)
|
||||
{
|
||||
/* qse_wcstombs() should succeed as
|
||||
* qse_wcstombslen() was successful above */
|
||||
qse_wcstombs (cmd, mcmd, &mn);
|
||||
/* qse_wcstombs() null-terminate mcmd */
|
||||
}
|
||||
else
|
||||
{
|
||||
QSE_ASSERT (wcmd != QSE_NULL);
|
||||
/* qse_wcsntombsn() should succeed as
|
||||
* qse_wcsntombsnlen() was successful above */
|
||||
qse_wcsntombsn (wcmd, wl, mcmd, &mn);
|
||||
/* qse_wcsntombsn() doesn't null-terminate mcmd */
|
||||
mcmd[mn] = QSE_MT('\0');
|
||||
}
|
||||
#endif
|
||||
|
||||
if (flags & QSE_PIO_SHELL)
|
||||
{
|
||||
const qse_mchar_t* argv[4];
|
||||
|
||||
argv[0] = QSE_MT("/bin/sh");
|
||||
argv[1] = QSE_MT("-c");
|
||||
@ -215,14 +280,26 @@ qse_pio_t* qse_pio_init (
|
||||
}
|
||||
else
|
||||
{
|
||||
/* TODO: need to parse the command in a simple manner */
|
||||
QSE_EXECVE (mcmd, argv, environ);
|
||||
int i;
|
||||
qse_mchar_t** argv;
|
||||
|
||||
argv = QSE_MMGR_ALLOC (pio->mmgr, (fcnt+1)*QSE_SIZEOF(argv[0]));
|
||||
if (argv == QSE_NULL) goto child_oops;
|
||||
|
||||
for (i = 0; i < fcnt; i++)
|
||||
{
|
||||
argv[i] = mcmd;
|
||||
while (*mcmd != QSE_MT('\0')) mcmd++;
|
||||
mcmd++;
|
||||
}
|
||||
argv[i] = QSE_NULL;
|
||||
|
||||
QSE_EXECVE (argv[0], argv, environ);
|
||||
}
|
||||
|
||||
child_oops:
|
||||
QSE_EXIT(127);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* parent */
|
||||
pio->child = pid;
|
||||
@ -235,7 +312,7 @@ qse_pio_t* qse_pio_init (
|
||||
* X
|
||||
* WRITE => 1
|
||||
*/
|
||||
QSE_CLOSE (handle[0]); handle[0] = -1;
|
||||
QSE_CLOSE (handle[0]); handle[0] = QSE_PIO_HND_NIL;
|
||||
}
|
||||
|
||||
if (flags & QSE_PIO_READOUT)
|
||||
@ -246,7 +323,7 @@ qse_pio_t* qse_pio_init (
|
||||
* X
|
||||
* READ => 2
|
||||
*/
|
||||
QSE_CLOSE (handle[3]); handle[3] = -1;
|
||||
QSE_CLOSE (handle[3]); handle[3] = QSE_PIO_HND_NIL;
|
||||
}
|
||||
|
||||
if (flags & QSE_PIO_READERR)
|
||||
@ -257,7 +334,7 @@ qse_pio_t* qse_pio_init (
|
||||
* X
|
||||
* READ => 4
|
||||
*/
|
||||
QSE_CLOSE (handle[5]); handle[5] = -1;
|
||||
QSE_CLOSE (handle[5]); handle[5] = QSE_PIO_HND_NIL;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -303,7 +380,7 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
|
||||
while (1)
|
||||
{
|
||||
n = waitpid (pio->child, &status, opt);
|
||||
n = QSE_WAITPID (pio->child, &status, opt);
|
||||
if (n == 0) break;
|
||||
/* TODO: .... */
|
||||
}
|
||||
@ -315,13 +392,13 @@ int qse_pio_wait (qse_pio_t* pio)
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_pio_hnd_t qse_pio_gethandle (qse_pio_t* pio, int hid)
|
||||
qse_pio_hnd_t qse_pio_gethandle (qse_pio_t* pio, qse_pio_hid_t hid)
|
||||
{
|
||||
return pio->handle[hid];
|
||||
}
|
||||
|
||||
qse_ssize_t qse_pio_read (
|
||||
qse_pio_t* pio, void* buf, qse_size_t size, int hid)
|
||||
qse_pio_t* pio, void* buf, qse_size_t size, qse_pio_hid_t hid)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
DWORD count;
|
||||
@ -329,7 +406,7 @@ qse_ssize_t qse_pio_read (
|
||||
if (ReadFile(pio->handle, buf, size, &count, QSE_NULL) == FALSE) return -1;
|
||||
return (qse_ssize_t)count;
|
||||
#else
|
||||
if (pio->handle[hid] == -1)
|
||||
if (pio->handle[hid] == QSE_PIO_HND_NIL)
|
||||
{
|
||||
/* the stream is already closed */
|
||||
return (qse_ssize_t)-1;
|
||||
@ -341,7 +418,7 @@ qse_ssize_t qse_pio_read (
|
||||
}
|
||||
|
||||
qse_ssize_t qse_pio_write (
|
||||
qse_pio_t* pio, const void* data, qse_size_t size, int hid)
|
||||
qse_pio_t* pio, const void* data, qse_size_t size, qse_pio_hid_t hid)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
DWORD count;
|
||||
@ -349,7 +426,7 @@ qse_ssize_t qse_pio_write (
|
||||
if (WriteFile(pio->handle, data, size, &count, QSE_NULL) == FALSE) return -1;
|
||||
return (qse_ssize_t)count;
|
||||
#else
|
||||
if (pio->handle[hid] == -1)
|
||||
if (pio->handle[hid] == QSE_PIO_HND_NIL)
|
||||
{
|
||||
/* the stream is already closed */
|
||||
return (qse_ssize_t)-1;
|
||||
@ -360,11 +437,11 @@ qse_ssize_t qse_pio_write (
|
||||
#endif
|
||||
}
|
||||
|
||||
void qse_pio_end (qse_pio_t* pio, int hid)
|
||||
void qse_pio_end (qse_pio_t* pio, qse_pio_hid_t hid)
|
||||
{
|
||||
if (pio->handle[hid] != -1)
|
||||
if (pio->handle[hid] != QSE_PIO_HND_NIL)
|
||||
{
|
||||
QSE_CLOSE (pio->handle[hid]);
|
||||
pio->handle[hid] = -1;
|
||||
pio->handle[hid] = QSE_PIO_HND_NIL;
|
||||
}
|
||||
}
|
||||
|
@ -186,6 +186,60 @@ qse_size_t qse_mbsntowcsn (
|
||||
return p - mbs; /* returns the number of bytes processed */
|
||||
}
|
||||
|
||||
qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen)
|
||||
{
|
||||
const qse_wchar_t* p = wcs;
|
||||
qse_mchar_t mbs[32];
|
||||
qse_size_t mlen = 0;
|
||||
|
||||
while (*p != QSE_WT('\0'))
|
||||
{
|
||||
qse_size_t n = qse_wctomb (*p, mbs, QSE_COUNTOF(mbs));
|
||||
if (n == 0) break; /* illegal character */
|
||||
|
||||
/* it assumes that mbs is large enough to hold a character */
|
||||
QSE_ASSERT (n <= QSE_COUNTOF(mbs));
|
||||
|
||||
p++; mlen += n;
|
||||
}
|
||||
|
||||
/* this length excludes the terminating null character. */
|
||||
*mbslen = mlen;
|
||||
|
||||
/* returns the number of characters handled.
|
||||
* if the function has encountered an illegal character in
|
||||
* the while loop above, wcs[p-wcs] will not be a null character */
|
||||
return p - wcs;
|
||||
}
|
||||
|
||||
qse_size_t qse_wcsntombsnlen (
|
||||
const qse_wchar_t* wcs, qse_size_t wcslen, qse_size_t* mbslen)
|
||||
{
|
||||
const qse_wchar_t* p = wcs;
|
||||
const qse_wchar_t* end = wcs + wcslen;
|
||||
qse_mchar_t mbs[32];
|
||||
qse_size_t mlen = 0;
|
||||
|
||||
while (p < end)
|
||||
{
|
||||
qse_size_t n = qse_wctomb (*p, mbs, QSE_COUNTOF(mbs));
|
||||
if (n == 0) break; /* illegal character */
|
||||
|
||||
/* it assumes that mbs is large enough to hold a character */
|
||||
QSE_ASSERT (n <= QSE_COUNTOF(mbs));
|
||||
|
||||
p++; mlen += n;
|
||||
}
|
||||
|
||||
/* this length excludes the terminating null character. */
|
||||
*mbslen = mlen;
|
||||
|
||||
/* returns the number of characters handled.
|
||||
* if the function has encountered an illegal character in
|
||||
* the while loop above, wcs[p-wcs] will not be a null character */
|
||||
return p - wcs;
|
||||
}
|
||||
|
||||
qse_size_t qse_wcstombs (
|
||||
const qse_wchar_t* wcs, qse_mchar_t* mbs, qse_size_t* mbslen)
|
||||
{
|
||||
@ -221,32 +275,6 @@ qse_size_t qse_wcstombs (
|
||||
return p - wcs;
|
||||
}
|
||||
|
||||
qse_size_t qse_wcstombslen (const qse_wchar_t* wcs, qse_size_t* mbslen)
|
||||
{
|
||||
const qse_wchar_t* p = wcs;
|
||||
qse_mchar_t mbs[32];
|
||||
qse_size_t mlen = 0;
|
||||
|
||||
while (*p != QSE_WT('\0'))
|
||||
{
|
||||
qse_size_t n = qse_wctomb (*p, mbs, QSE_COUNTOF(mbs));
|
||||
if (n == 0) break; /* illegal character */
|
||||
|
||||
/* it assumes that mbs is large enough to hold a character */
|
||||
QSE_ASSERT (n <= QSE_COUNTOF(mbs));
|
||||
|
||||
p++; mlen += n;
|
||||
}
|
||||
|
||||
/* this length excludes the terminating null character. */
|
||||
*mbslen = mlen;
|
||||
|
||||
/* returns the number of characters handled.
|
||||
* if the function has encountered an illegal character in
|
||||
* the while loop above, wcs[p-wcs] will not be a null character */
|
||||
return p - wcs;
|
||||
}
|
||||
|
||||
qse_size_t qse_wcsntombsn (
|
||||
const qse_wchar_t* wcs, qse_size_t wcslen,
|
||||
qse_mchar_t* mbs, qse_size_t* mbslen)
|
||||
|
@ -16,18 +16,17 @@
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#includle <qse/cmn/str.h>
|
||||
#include <qse/cmn/str.h>
|
||||
#include "chr.h"
|
||||
|
||||
int qse_strspl (
|
||||
qse_char_t* s, const qse_char_t* delim,
|
||||
qse_char_t lquote, qse_char_t rquote,
|
||||
qse_char_t escape, qse_size_t* count)
|
||||
qse_char_t lquote, qse_char_t rquote, qse_char_t escape)
|
||||
{
|
||||
qse_char_t* p = s, *d;
|
||||
qse_char_t* sp = QSE_NULL, * ep = QSE_NULL;
|
||||
int delim_mode;
|
||||
qse_size_t cnt = 0;
|
||||
int cnt = 0;
|
||||
|
||||
if (delim == QSE_NULL) delim_mode = 0;
|
||||
else
|
||||
@ -258,25 +257,6 @@ exit_point:
|
||||
}
|
||||
|
||||
|
||||
*count = cnt;
|
||||
return 0;
|
||||
return cnt;
|
||||
}
|
||||
|
||||
int qse_strspls (
|
||||
qse_char_t* s, const qse_char_t* delim,
|
||||
qse_char_t lquote, qse_char_t rquote,
|
||||
qse_char_t escape, qse_size_t* count, qse_char_t* ptrs[])
|
||||
{
|
||||
qse_size_t cnt = *count, i;
|
||||
|
||||
if (qse_strspl (s, delim, lquote, rquote, escape, count) == -1) return -1;
|
||||
for (i = 0; i < *count && i < cnt; i++)
|
||||
{
|
||||
ptrs[i] = s;
|
||||
s += qse_strlen(s) + 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user