* added QSE_MBLEN_MAX

* added qse_getcclsid() and related functions
* added qse_isblank() and realted code
This commit is contained in:
2011-08-22 23:26:26 +00:00
parent 03dad41aa2
commit 2c4ed8caf9
57 changed files with 985 additions and 448 deletions

View File

@ -36,10 +36,11 @@ host_triplet = @host@
subdir = lib
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -38,10 +38,11 @@ host_triplet = @host@
subdir = lib/awk
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -1,5 +1,5 @@
/*
* $Id: parse.c 551 2011-08-15 13:52:48Z hyunghwan.chung $
* $Id: parse.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -5909,9 +5909,11 @@ retry:
{
/* not handled yet */
if (c == QSE_T('\0'))
{
SETERR_ARG_LOC (
awk, QSE_AWK_ELXCHR,
QSE_T("<NUL>"), 5, &tok->loc);
}
else
{
qse_char_t cc = (qse_char_t)c;

View File

@ -38,10 +38,11 @@ host_triplet = @host@
subdir = lib/cmn
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -1,5 +1,5 @@
/*
* $Id: chr.c 441 2011-04-22 14:28:43Z hyunghwan.chung $
* $Id: chr.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -19,61 +19,80 @@
*/
#include <qse/cmn/chr.h>
#include <qse/cmn/str.h>
#include <ctype.h>
#include <wctype.h>
static qse_bool_t is_mupper (qse_mcint_t c) { return isupper(c); }
static qse_bool_t is_mlower (qse_mcint_t c) { return islower(c); }
static qse_bool_t is_malpha (qse_mcint_t c) { return isalpha(c); }
static qse_bool_t is_mdigit (qse_mcint_t c) { return isdigit(c); }
static qse_bool_t is_mxdigit (qse_mcint_t c) { return isxdigit(c); }
static qse_bool_t is_malnum (qse_mcint_t c) { return isalnum(c); }
static qse_bool_t is_mspace (qse_mcint_t c) { return isspace(c); }
static qse_bool_t is_mprint (qse_mcint_t c) { return isprint(c); }
static qse_bool_t is_mgraph (qse_mcint_t c) { return isgraph(c); }
static qse_bool_t is_mblank (qse_mcint_t c)
{
#ifdef HAVE_ISBLANK
return isblank(c);
#else
return c == QSE_MT(' ') || c == QSE_MT('\t');
#endif
}
static qse_bool_t is_mcntrl (qse_mcint_t c) { return iscntrl(c); }
static qse_bool_t is_mdigit (qse_mcint_t c) { return isdigit(c); }
static qse_bool_t is_mgraph (qse_mcint_t c) { return isgraph(c); }
static qse_bool_t is_mlower (qse_mcint_t c) { return islower(c); }
static qse_bool_t is_mprint (qse_mcint_t c) { return isprint(c); }
static qse_bool_t is_mpunct (qse_mcint_t c) { return ispunct(c); }
static qse_bool_t is_mspace (qse_mcint_t c) { return isspace(c); }
static qse_bool_t is_mupper (qse_mcint_t c) { return isupper(c); }
static qse_bool_t is_mxdigit (qse_mcint_t c) { return isxdigit(c); }
static qse_bool_t is_wupper (qse_wcint_t c) { return iswupper(c); }
static qse_bool_t is_wlower (qse_wcint_t c) { return iswlower(c); }
static qse_bool_t is_walpha (qse_wcint_t c) { return iswalpha(c); }
static qse_bool_t is_wdigit (qse_wcint_t c) { return iswdigit(c); }
static qse_bool_t is_wxdigit (qse_wcint_t c) { return iswxdigit(c); }
static qse_bool_t is_walnum (qse_wcint_t c) { return iswalnum(c); }
static qse_bool_t is_wspace (qse_wcint_t c) { return iswspace(c); }
static qse_bool_t is_wprint (qse_wcint_t c) { return iswprint(c); }
static qse_bool_t is_wgraph (qse_wcint_t c) { return iswgraph(c); }
static qse_bool_t is_wblank (qse_wcint_t c)
{
#ifdef HAVE_ISWBLANK
return iswblank(c);
#else
return c == QSE_WT(' ') || c == QSE_WT('\t');
#endif
}
static qse_bool_t is_wcntrl (qse_wcint_t c) { return iswcntrl(c); }
static qse_bool_t is_wdigit (qse_wcint_t c) { return iswdigit(c); }
static qse_bool_t is_wgraph (qse_wcint_t c) { return iswgraph(c); }
static qse_bool_t is_wlower (qse_wcint_t c) { return iswlower(c); }
static qse_bool_t is_wprint (qse_wcint_t c) { return iswprint(c); }
static qse_bool_t is_wpunct (qse_wcint_t c) { return iswpunct(c); }
static qse_bool_t is_wspace (qse_wcint_t c) { return iswspace(c); }
static qse_bool_t is_wupper (qse_wcint_t c) { return iswupper(c); }
static qse_bool_t is_wxdigit (qse_wcint_t c) { return iswxdigit(c); }
qse_bool_t qse_mccls_is (qse_mcint_t c, qse_mccls_id_t type)
qse_bool_t qse_ismccls (qse_mcint_t c, qse_mccls_id_t type)
{
/* TODO: use GetStringTypeW/A for WIN32 to implement these */
static qse_bool_t (*f[]) (qse_mcint_t) =
{
is_mupper,
is_mlower,
is_malpha,
is_mdigit,
is_mxdigit,
is_malnum,
is_mspace,
is_mprint,
is_mgraph,
is_malpha,
is_mblank,
is_mcntrl,
is_mpunct
is_mdigit,
is_mgraph,
is_mlower,
is_mprint,
is_mpunct,
is_mspace,
is_mupper,
is_mxdigit
};
QSE_ASSERTX (type >= QSE_MCCLS_UPPER && type <= QSE_MCCLS_PUNCT,
QSE_ASSERTX (type >= QSE_WCCLS_ALNUM && type <= QSE_WCCLS_XDIGIT,
"The character type should be one of qse_mccls_id_t values");
return f[type] (c);
return f[type-1] (c);
}
qse_mcint_t qse_mccls_to (qse_mcint_t c, qse_mccls_id_t type)
qse_mcint_t qse_tomccls (qse_mcint_t c, qse_mccls_id_t type)
{
QSE_ASSERTX (type >= QSE_MCCLS_UPPER && type <= QSE_MCCLS_LOWER,
QSE_ASSERTX (type == QSE_MCCLS_UPPER || type == QSE_MCCLS_LOWER,
"The character type should be one of QSE_MCCLS_UPPER and QSE_MCCLS_LOWER");
if (type == QSE_MCCLS_UPPER) return toupper(c);
@ -81,7 +100,7 @@ qse_mcint_t qse_mccls_to (qse_mcint_t c, qse_mccls_id_t type)
return c;
}
qse_bool_t qse_wccls_is (qse_wcint_t c, qse_wccls_id_t type)
qse_bool_t qse_iswccls (qse_wcint_t c, qse_wccls_id_t type)
{
/*
#ifdef HAVE_WCTYPE
@ -124,28 +143,29 @@ qse_bool_t qse_wccls_is (qse_wcint_t c, qse_wccls_id_t type)
*/
static qse_bool_t (*f[]) (qse_wcint_t) =
{
is_wupper,
is_wlower,
is_walpha,
is_wdigit,
is_wxdigit,
is_walnum,
is_wspace,
is_wprint,
is_wgraph,
is_walpha,
is_wblank,
is_wcntrl,
is_wpunct
is_wdigit,
is_wgraph,
is_wlower,
is_wprint,
is_wpunct,
is_wspace,
is_wupper,
is_wxdigit
};
QSE_ASSERTX (type >= QSE_WCCLS_UPPER && type <= QSE_WCCLS_PUNCT,
QSE_ASSERTX (type >= QSE_WCCLS_ALNUM && type <= QSE_WCCLS_XDIGIT,
"The character type should be one of qse_wccls_id_t values");
return f[type] (c);
return f[type-1] (c);
/*
#endif
*/
}
qse_wcint_t qse_wccls_to (qse_wcint_t c, qse_wccls_id_t type)
qse_wcint_t qse_towccls (qse_wcint_t c, qse_wccls_id_t type)
{
/*
#ifdef HAVE_WCTRANS
@ -168,11 +188,189 @@ qse_wcint_t qse_wccls_to (qse_wcint_t c, qse_wccls_id_t type)
return towctrans (c, desc[type]);
#else
*/
QSE_ASSERTX (type >= QSE_WCCLS_UPPER && type <= QSE_WCCLS_LOWER,
QSE_ASSERTX (type == QSE_WCCLS_UPPER || type == QSE_WCCLS_LOWER,
"The type should be one of QSE_WCCLS_UPPER and QSE_WCCLS_LOWER");
return (type == QSE_CCLS_UPPER)? towupper(c): towlower(c);
if (type == QSE_WCCLS_UPPER) return towupper(c);
if (type == QSE_WCCLS_LOWER) return towlower(c);
return c;
/*
#endif
*/
}
static struct wtab_t
{
const qse_wchar_t* name;
int class;
} wtab[] =
{
{ QSE_WT("alnum"), QSE_WCCLS_ALNUM },
{ QSE_WT("alpha"), QSE_WCCLS_ALPHA },
{ QSE_WT("blank"), QSE_WCCLS_BLANK },
{ QSE_WT("cntrl"), QSE_WCCLS_CNTRL },
{ QSE_WT("digit"), QSE_WCCLS_DIGIT },
{ QSE_WT("graph"), QSE_WCCLS_GRAPH },
{ QSE_WT("lower"), QSE_WCCLS_LOWER },
{ QSE_WT("print"), QSE_WCCLS_PRINT },
{ QSE_WT("punct"), QSE_WCCLS_PUNCT },
{ QSE_WT("space"), QSE_WCCLS_SPACE },
{ QSE_WT("upper"), QSE_WCCLS_UPPER },
{ QSE_WT("xdigit"), QSE_WCCLS_XDIGIT }
};
int qse_getwcclsidbyname (const qse_wchar_t* name, qse_wccls_id_t* id)
{
int left = 0, right = QSE_COUNTOF(wtab) - 1, mid;
while (left <= right)
{
int n;
struct wtab_t* kwp;
mid = (left + right) / 2;
kwp = &wtab[mid];
n = qse_wcscmp (name, wtab->name);
if (n > 0)
{
/* if left, right, mid were of qse_size_t,
* you would need the following line.
if (mid == 0) break;
*/
right = mid - 1;
}
else if (n < 0) left = mid + 1;
else
{
*id = kwp->class;
return 0;
}
}
return -1;
}
int qse_getwcclsidbyxname (const qse_wchar_t* name, qse_size_t len, qse_wccls_id_t* id)
{
int left = 0, right = QSE_COUNTOF(wtab) - 1, mid;
while (left <= right)
{
int n;
struct wtab_t* kwp;
mid = (left + right) / 2;
kwp = &wtab[mid];
n = qse_wcsxcmp (name, len, wtab->name);
if (n > 0)
{
/* if left, right, mid were of qse_size_t,
* you would need the following line.
if (mid == 0) break;
*/
right = mid - 1;
}
else if (n < 0) left = mid + 1;
else
{
*id = kwp->class;
return 0;
}
}
return -1;
}
qse_wccls_id_t qse_getwcclsid (const qse_wchar_t* name)
{
qse_wccls_id_t id;
return (qse_getwcclsidbyname(name,&id) <= -1)? ((qse_wccls_id_t)0): id;
}
static struct mtab_t
{
const qse_mchar_t* name;
int class;
} mtab[] =
{
{ QSE_MT("alnum"), QSE_MCCLS_ALNUM },
{ QSE_MT("alpha"), QSE_MCCLS_ALPHA },
{ QSE_MT("blank"), QSE_MCCLS_BLANK },
{ QSE_MT("cntrl"), QSE_MCCLS_CNTRL },
{ QSE_MT("digit"), QSE_MCCLS_DIGIT },
{ QSE_MT("graph"), QSE_MCCLS_GRAPH },
{ QSE_MT("lower"), QSE_MCCLS_LOWER },
{ QSE_MT("print"), QSE_MCCLS_PRINT },
{ QSE_MT("punct"), QSE_MCCLS_PUNCT },
{ QSE_MT("space"), QSE_MCCLS_SPACE },
{ QSE_MT("upper"), QSE_MCCLS_UPPER },
{ QSE_MT("xdigit"), QSE_MCCLS_XDIGIT },
{ QSE_NULL, 0 }
};
int qse_getmcclsidbyname (const qse_mchar_t* name, qse_mccls_id_t* id)
{
int left = 0, right = QSE_COUNTOF(mtab) - 1, mid;
while (left <= right)
{
int n;
struct mtab_t* kwp;
mid = (left + right) / 2;
kwp = &mtab[mid];
n = qse_mbscmp (name, mtab->name);
if (n > 0)
{
/* if left, right, mid were of qse_size_t,
* you would need the following line.
if (mid == 0) break;
*/
right = mid - 1;
}
else if (n < 0) left = mid + 1;
else
{
*id = kwp->class;
return 0;
}
}
return (qse_mccls_id_t)0;
}
int qse_getmcclsidbyxname (const qse_mchar_t* name, qse_size_t len, qse_mccls_id_t* id)
{
int left = 0, right = QSE_COUNTOF(mtab) - 1, mid;
while (left <= right)
{
int n;
struct mtab_t* kwp;
mid = (left + right) / 2;
kwp = &mtab[mid];
n = qse_mbsxcmp (name, len, mtab->name);
if (n > 0)
{
/* if left, right, mid were of qse_size_t,
* you would need the following line.
if (mid == 0) break;
*/
right = mid - 1;
}
else if (n < 0) left = mid + 1;
else
{
*id = kwp->class;
return 0;
}
}
return (qse_mccls_id_t)0;
}
qse_mccls_id_t qse_getmcclsid (const qse_mchar_t* name)
{
qse_mccls_id_t id;
return (qse_getmcclsidbyname(name,&id) <= -1)? ((qse_mccls_id_t)0): id;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: chr_cnv.c 451 2011-05-03 14:00:38Z hyunghwan.chung $
* $Id: chr_cnv.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -38,22 +38,22 @@
# include <stdlib.h>
#endif
qse_size_t qse_mblen (const qse_mchar_t* mb, qse_size_t mblen)
qse_size_t qse_mbrlen (
const qse_mchar_t* mb, qse_size_t mbl, qse_mbstate_t* state)
{
#ifdef HAVE_MBRLEN
size_t n;
mbstate_t mbs = { 0 };
n = mbrlen (mb, mblen, &mbs);
n = mbrlen (mb, mbl, (mbstate_t*)state);
if (n == 0) return 1; /* a null character */
if (n == (size_t)-1) return 0; /* invalid sequence */
if (n == (size_t)-2) return mblen + 1; /* incomplete sequence */
if (n == (size_t)-2) return mbl + 1; /* incomplete sequence */
return (qse_size_t)n;
#if 0
n = mblen (mb, mblen, &mbs);
n = mblen (mb, mbl);
if (n == 0) return 1; /* a null character */
if (n == (size_t)-1) return 0; /* invalid or incomplete sequence */
return (qse_size_t)n;
@ -63,13 +63,14 @@ qse_size_t qse_mblen (const qse_mchar_t* mb, qse_size_t mblen)
#endif
}
qse_size_t qse_mbtowc (const qse_mchar_t* mb, qse_size_t mblen, qse_wchar_t* wc)
qse_size_t qse_mbrtowc (
const qse_mchar_t* mb, qse_size_t mbl,
qse_wchar_t* wc, qse_mbstate_t* state)
{
#ifdef HAVE_MBRTOWC
size_t n;
mbstate_t mbs = { 0 };
n = mbrtowc (wc, mb, mblen, &mbs);
n = mbrtowc (wc, mb, mbl, (mbstate_t*)state);
if (n == 0)
{
*wc = QSE_WT('\0');
@ -77,51 +78,38 @@ qse_size_t qse_mbtowc (const qse_mchar_t* mb, qse_size_t mblen, qse_wchar_t* wc)
}
if (n == (size_t)-1) return 0; /* invalid sequence */
if (n == (size_t)-2) return mblen + 1; /* incomplete sequence */
if (n == (size_t)-2) return mbl + 1; /* incomplete sequence */
return (qse_size_t)n;
#else
#error #### NOT SUPPORTED ####
#endif
}
qse_size_t qse_wctomb (qse_wchar_t wc, qse_mchar_t* mb, qse_size_t mblen)
qse_size_t qse_wcrtomb (
qse_wchar_t wc, qse_mchar_t* mb,
qse_size_t mbl, qse_mbstate_t* state)
{
#ifdef HAVE_WCRTOMB
size_t n;
mbstate_t mbs = { 0 };
/* man mbsinit
* For 8-bit encodings, all states are equivalent to the initial state.
* For multibyte encodings like UTF-8, EUC-*, BIG5 or SJIS, the wide char
* acter to multibyte conversion functions never produce non-initial
* states, but the multibyte to wide-character conversion functions like
* mbrtowc(3) do produce non-initial states when interrupted in the middle
* of a character.
*/
#ifdef _SCO_DS
/* SCO defines MB_CUR_MAX as shown below:
* extern unsigned char __ctype[];
* #define MB_CUR_MAX ((int)__ctype[520])
* Some hacks are needed for compilation with a C89 compiler. */
# undef MB_CUR_MAX
# define MB_CUR_MAX 32
#endif
if (mblen < MB_CUR_MAX)
if (mbl < QSE_MBLEN_MAX)
{
qse_mchar_t buf[MB_CUR_MAX];
/* the buffer given is too small. try conversion on
* a temporary buffer large enough to handle all locales
* and copy the result to the original buffer.
*/
qse_mchar_t buf[QSE_MBLEN_MAX];
n = wcrtomb (buf, wc, &mbs);
if (n > mblen) return mblen + 1; /* buffer to small */
n = wcrtomb (buf, wc, (mbstate_t*)state);
if (n > mbl) return mbl + 1; /* buffer to small */
if (n == (size_t)-1) return 0; /* illegal character */
QSE_MEMCPY (mb, buf, mblen);
QSE_MEMCPY (mb, buf, mbl);
}
else
{
n = wcrtomb (mb, wc, &mbs);
if (n > mblen) return mblen + 1; /* buffer to small */
n = wcrtomb (mb, wc, (mbstate_t*)state);
if (n > mbl) return mbl + 1; /* buffer to small */
if (n == (size_t)-1) return 0; /* illegal character */
}
@ -131,3 +119,33 @@ qse_size_t qse_wctomb (qse_wchar_t wc, qse_mchar_t* mb, qse_size_t mblen)
#endif
}
/* man mbsinit
* For 8-bit encodings, all states are equivalent to the initial state.
* For multibyte encodings like UTF-8, EUC-*, BIG5 or SJIS, the wide char
* acter to multibyte conversion functions never produce non-initial
* states, but the multibyte to wide-character conversion functions like
* mbrtowc(3) do produce non-initial states when interrupted in the middle
* of a character.
*/
qse_size_t qse_mblen (const qse_mchar_t* mb, qse_size_t mbl)
{
qse_mbstate_t state = { { 0, } };
return qse_mbrlen (mb, mbl, &state);
}
qse_size_t qse_mbtowc (const qse_mchar_t* mb, qse_size_t mbl, qse_wchar_t* wc)
{
qse_mbstate_t state = { { 0, } };
return qse_mbrtowc (mb, mbl, wc, &state);
}
qse_size_t qse_wctomb (qse_wchar_t wc, qse_mchar_t* mb, qse_size_t mbl)
{
qse_mbstate_t state = { { 0, } };
return qse_wcrtomb (wc, mb, mbl, &state);
}
int qse_mbcurmax (void)
{
return MB_CUR_MAX;
}

View File

@ -139,6 +139,13 @@ void* qse_fma_alloc (qse_fma_t* fma, qse_size_t size)
return blk;
}
void* qse_fma_calloc (qse_fma_t* fma, qse_size_t size)
{
void* ptr = qse_fma_alloc (fma, size);
if (size) QSE_MEMSET (ptr, 0, size);
return ptr;
}
void* qse_fma_realloc (qse_fma_t* fma, void* blk, qse_size_t size)
{
if (blk)

View File

@ -380,46 +380,46 @@ static void adjust (rbt_t* rbt, pair_t* pair)
{
while (pair != rbt->root)
{
pair_t* tmp, * tmp2, * xpar;
pair_t* tmp, * tmp2, * x_par;
int leftwise;
xpar = pair->parent;
if (xpar->color == QSE_RBT_BLACK) break;
x_par = pair->parent;
if (x_par->color == QSE_RBT_BLACK) break;
QSE_ASSERT (xpar->parent != QSE_NULL);
QSE_ASSERT (x_par->parent != QSE_NULL);
if (xpar == xpar->parent->child[LEFT])
if (x_par == x_par->parent->child[LEFT])
{
tmp = xpar->parent->child[RIGHT];
tmp2 = xpar->child[RIGHT];
tmp = x_par->parent->child[RIGHT];
tmp2 = x_par->child[RIGHT];
leftwise = 1;
}
else
{
tmp = xpar->parent->child[LEFT];
tmp2 = xpar->child[LEFT];
tmp = x_par->parent->child[LEFT];
tmp2 = x_par->child[LEFT];
leftwise = 0;
}
if (tmp->color == QSE_RBT_RED)
{
xpar->color = QSE_RBT_BLACK;
x_par->color = QSE_RBT_BLACK;
tmp->color = QSE_RBT_BLACK;
xpar->parent->color = QSE_RBT_RED;
pair = xpar->parent;
x_par->parent->color = QSE_RBT_RED;
pair = x_par->parent;
}
else
{
if (pair == tmp2)
{
pair = xpar;
pair = x_par;
rotate (rbt, pair, leftwise);
xpar = pair->parent;
x_par = pair->parent;
}
xpar->color = QSE_RBT_BLACK;
xpar->parent->color = QSE_RBT_RED;
rotate (rbt, xpar->parent, !leftwise);
x_par->color = QSE_RBT_BLACK;
x_par->parent->color = QSE_RBT_RED;
rotate (rbt, x_par->parent, !leftwise);
}
}
}
@ -510,24 +510,24 @@ static pair_t* change_pair_val (
static pair_t* insert (
rbt_t* rbt, void* kptr, size_t klen, void* vptr, size_t vlen, int opt)
{
pair_t* xcur = rbt->root;
pair_t* xpar = QSE_NULL;
pair_t* xnew;
pair_t* x_cur = rbt->root;
pair_t* x_par = QSE_NULL;
pair_t* x_new;
while (!IS_NIL(rbt,xcur))
while (!IS_NIL(rbt,x_cur))
{
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(xcur), KLEN(xcur));
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(x_cur), KLEN(x_cur));
if (n == 0)
{
switch (opt)
{
case UPSERT:
case UPDATE:
return change_pair_val (rbt, xcur, vptr, vlen);
return change_pair_val (rbt, x_cur, vptr, vlen);
case ENSERT:
/* return existing pair */
return xcur;
return x_cur;
case INSERT:
/* return failure */
@ -535,44 +535,44 @@ static pair_t* insert (
}
}
xpar = xcur;
x_par = x_cur;
if (n > 0) xcur = xcur->right;
else /* if (n < 0) */ xcur = xcur->left;
if (n > 0) x_cur = x_cur->right;
else /* if (n < 0) */ x_cur = x_cur->left;
}
if (opt == UPDATE) return QSE_NULL;
xnew = qse_rbt_allocpair (rbt, kptr, klen, vptr, vlen);
if (xnew == QSE_NULL) return QSE_NULL;
x_new = qse_rbt_allocpair (rbt, kptr, klen, vptr, vlen);
if (x_new == QSE_NULL) return QSE_NULL;
if (xpar == QSE_NULL)
if (x_par == QSE_NULL)
{
/* the tree contains no pair */
QSE_ASSERT (rbt->root == &rbt->nil);
rbt->root = xnew;
rbt->root = x_new;
}
else
{
/* perform normal binary insert */
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(xpar), KLEN(xpar));
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(x_par), KLEN(x_par));
if (n > 0)
{
QSE_ASSERT (xpar->right == &rbt->nil);
xpar->right = xnew;
QSE_ASSERT (x_par->right == &rbt->nil);
x_par->right = x_new;
}
else
{
QSE_ASSERT (xpar->left == &rbt->nil);
xpar->left = xnew;
QSE_ASSERT (x_par->left == &rbt->nil);
x_par->left = x_new;
}
xnew->parent = xpar;
adjust (rbt, xnew);
x_new->parent = x_par;
adjust (rbt, x_new);
}
rbt->root->color = QSE_RBT_BLACK;
return xnew;
return x_new;
}
pair_t* qse_rbt_upsert (
@ -603,95 +603,95 @@ pair_t* qse_rbt_update (
pair_t* qse_rbt_cbsert (
rbt_t* rbt, void* kptr, size_t klen, cbserter_t cbserter, void* ctx)
{
pair_t* xcur = rbt->root;
pair_t* xpar = QSE_NULL;
pair_t* xnew;
pair_t* x_cur = rbt->root;
pair_t* x_par = QSE_NULL;
pair_t* x_new;
while (!IS_NIL(rbt,xcur))
while (!IS_NIL(rbt,x_cur))
{
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(xcur), KLEN(xcur));
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(x_cur), KLEN(x_cur));
if (n == 0)
{
/* back up the contents of the current pair
* in case it is reallocated */
pair_t tmp = *xcur;
pair_t tmp = *x_cur;
/* call the callback function to manipulate the pair */
xnew = cbserter (rbt, xcur, kptr, klen, ctx);
if (xnew == QSE_NULL)
x_new = cbserter (rbt, x_cur, kptr, klen, ctx);
if (x_new == QSE_NULL)
{
/* error returned by the callback function */
return QSE_NULL;
}
if (xnew != xcur)
if (x_new != x_cur)
{
/* the current pair has been reallocated, which implicitly
* means the previous contents were wiped out. so the contents
* backed up will be used for restoration/migration */
xnew->color = tmp.color;
xnew->left = tmp.left;
xnew->right = tmp.right;
xnew->parent = tmp.parent;
x_new->color = tmp.color;
x_new->left = tmp.left;
x_new->right = tmp.right;
x_new->parent = tmp.parent;
if (tmp.parent)
{
if (tmp.parent->left == xcur)
if (tmp.parent->left == x_cur)
{
tmp.parent->left = xnew;
tmp.parent->left = x_new;
}
else
{
QSE_ASSERT (tmp.parent->right == xcur);
tmp.parent->right = xnew;
QSE_ASSERT (tmp.parent->right == x_cur);
tmp.parent->right = x_new;
}
}
if (!IS_NIL(rbt,tmp.left)) tmp.left->parent = xnew;
if (!IS_NIL(rbt,tmp.right)) tmp.right->parent = xnew;
if (!IS_NIL(rbt,tmp.left)) tmp.left->parent = x_new;
if (!IS_NIL(rbt,tmp.right)) tmp.right->parent = x_new;
if (xcur == rbt->root) rbt->root = xnew;
if (x_cur == rbt->root) rbt->root = x_new;
}
return xnew;
return x_new;
}
xpar = xcur;
x_par = x_cur;
if (n > 0) xcur = xcur->right;
else /* if (n < 0) */ xcur = xcur->left;
if (n > 0) x_cur = x_cur->right;
else /* if (n < 0) */ x_cur = x_cur->left;
}
xnew = cbserter (rbt, QSE_NULL, kptr, klen, ctx);
if (xnew == QSE_NULL) return QSE_NULL;
x_new = cbserter (rbt, QSE_NULL, kptr, klen, ctx);
if (x_new == QSE_NULL) return QSE_NULL;
if (xpar == QSE_NULL)
if (x_par == QSE_NULL)
{
/* the tree contains no pair */
QSE_ASSERT (rbt->root == &rbt->nil);
rbt->root = xnew;
rbt->root = x_new;
}
else
{
/* perform normal binary insert */
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(xpar), KLEN(xpar));
int n = rbt->mancbs->comper (rbt, kptr, klen, KPTR(x_par), KLEN(x_par));
if (n > 0)
{
QSE_ASSERT (xpar->right == &rbt->nil);
xpar->right = xnew;
QSE_ASSERT (x_par->right == &rbt->nil);
x_par->right = x_new;
}
else
{
QSE_ASSERT (xpar->left == &rbt->nil);
xpar->left = xnew;
QSE_ASSERT (x_par->left == &rbt->nil);
x_par->left = x_new;
}
xnew->parent = xpar;
adjust (rbt, xnew);
x_new->parent = x_par;
adjust (rbt, x_new);
}
rbt->root->color = QSE_RBT_BLACK;
return xnew;
return x_new;
}
@ -910,65 +910,65 @@ static QSE_INLINE qse_rbt_walk_t walk_recursively (
static QSE_INLINE void walk (
rbt_t* rbt, walker_t walker, void* ctx, int l, int r)
{
pair_t* xcur = rbt->root;
pair_t* x_cur = rbt->root;
pair_t* prev = rbt->root->parent;
while (xcur && !IS_NIL(rbt,xcur))
while (x_cur && !IS_NIL(rbt,x_cur))
{
if (prev == xcur->parent)
if (prev == x_cur->parent)
{
/* the previous node is the parent of the current node.
* it indicates that we're going down to the child[l] */
if (!IS_NIL(rbt,xcur->child[l]))
if (!IS_NIL(rbt,x_cur->child[l]))
{
/* go to the child[l] child */
prev = xcur;
xcur = xcur->child[l];
prev = x_cur;
x_cur = x_cur->child[l];
}
else
{
if (walker (rbt, xcur, ctx) == QSE_RBT_WALK_STOP) break;
if (walker (rbt, x_cur, ctx) == QSE_RBT_WALK_STOP) break;
if (!IS_NIL(rbt,xcur->child[r]))
if (!IS_NIL(rbt,x_cur->child[r]))
{
/* go down to the right node if exists */
prev = xcur;
xcur = xcur->child[r];
prev = x_cur;
x_cur = x_cur->child[r];
}
else
{
/* otherwise, move up to the parent */
prev = xcur;
xcur = xcur->parent;
prev = x_cur;
x_cur = x_cur->parent;
}
}
}
else if (prev == xcur->child[l])
else if (prev == x_cur->child[l])
{
/* the left child has been already traversed */
if (walker (rbt, xcur, ctx) == QSE_RBT_WALK_STOP) break;
if (walker (rbt, x_cur, ctx) == QSE_RBT_WALK_STOP) break;
if (!IS_NIL(rbt,xcur->child[r]))
if (!IS_NIL(rbt,x_cur->child[r]))
{
/* go down to the right node if it exists */
prev = xcur;
xcur = xcur->child[r];
prev = x_cur;
x_cur = x_cur->child[r];
}
else
{
/* otherwise, move up to the parent */
prev = xcur;
xcur = xcur->parent;
prev = x_cur;
x_cur = x_cur->parent;
}
}
else
{
/* both the left child and the right child have been traversed */
QSE_ASSERT (prev == xcur->child[r]);
QSE_ASSERT (prev == x_cur->child[r]);
/* just move up to the parent */
prev = xcur;
xcur = xcur->parent;
prev = x_cur;
x_cur = x_cur->parent;
}
}
}

View File

@ -1,5 +1,5 @@
/*
* $Id: rex.c 471 2011-05-22 14:14:36Z hyunghwan.chung $
* $Id: rex.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -497,7 +497,7 @@ struct ccinfo_t
static int cc_isalnum (exec_t* e, qse_char_t c) { return QSE_ISALNUM (c); }
static int cc_isalpha (exec_t* e, qse_char_t c) { return QSE_ISALPHA (c); }
static int cc_isblank (exec_t* e, qse_char_t c) { return ISBLANK(c); }
static int cc_isblank (exec_t* e, qse_char_t c) { return QSE_ISBLANK(c); }
static int cc_iscntrl (exec_t* e, qse_char_t c) { return QSE_ISCNTRL (c); }
static int cc_isdigit (exec_t* e, qse_char_t c) { return QSE_ISDIGIT (c); }
static int cc_isgraph (exec_t* e, qse_char_t c) { return QSE_ISGRAPH (c); }

View File

@ -1,5 +1,5 @@
/*
* $Id: str_cnv.c 504 2011-07-11 16:31:33Z hyunghwan.chung $
* $Id: str_cnv.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -134,18 +134,24 @@ qse_ulong_t qse_strxtoulong (const qse_char_t* str, qse_size_t len)
return v;
}
/*
* TODO: fix wrong mbstate handling
*/
qse_size_t qse_mbstowcslen (const qse_mchar_t* mcs, qse_size_t* wcslen)
{
qse_wchar_t wc;
qse_size_t n, ml, wl = 0;
const qse_mchar_t* p = mcs;
qse_mbstate_t state = {{ 0, }};
while (*p != '\0') p++;
ml = p - mcs;
for (p = mcs; ml > 0; p += n, ml -= n)
{
n = qse_mbtowc (p, ml, &wc);
n = qse_mbrtowc (p, ml, &wc, &state);
/* insufficient input or wrong sequence */
if (n == 0 || n > ml) break;
wl++;
@ -155,15 +161,17 @@ qse_size_t qse_mbstowcslen (const qse_mchar_t* mcs, qse_size_t* wcslen)
return p - mcs;
}
qse_size_t qse_mbsntowcsnlen (const qse_mchar_t* mcs, qse_size_t mcslen, qse_size_t* wcslen)
qse_size_t qse_mbsntowcsnlen (
const qse_mchar_t* mcs, qse_size_t mcslen, qse_size_t* wcslen)
{
qse_wchar_t wc;
qse_size_t n, ml = mcslen, wl = 0;
const qse_mchar_t* p = mcs;
qse_mbstate_t state = {{ 0, }};
for (p = mcs; ml > 0; p += n, ml -= n)
{
n = qse_mbtowc (p, ml, &wc);
n = qse_mbrtowc (p, ml, &wc, &state);
/* insufficient or invalid sequence */
if (n == 0 || n > ml) break;
wl++;
@ -212,12 +220,13 @@ qse_size_t qse_mbsntowcsn (
qse_size_t mlen = mbslen, n;
const qse_mchar_t* p;
qse_wchar_t* q, * qend ;
qse_mbstate_t state = {{ 0, }};
qend = wcs + *wcslen;
for (p = mbs, q = wcs; mlen > 0 && q < qend; p += n, mlen -= n)
{
n = qse_mbtowc (p, mlen, q);
n = qse_mbrtowc (p, mlen, q, &state);
if (n == 0 || n > mlen)
{
/* wrong sequence or insufficient input */
@ -236,10 +245,11 @@ 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;
qse_mbstate_t state = {{ 0, }};
while (*p != QSE_WT('\0'))
{
qse_size_t n = qse_wctomb (*p, mbs, QSE_COUNTOF(mbs));
qse_size_t n = qse_wcrtomb (*p, mbs, QSE_COUNTOF(mbs), &state);
if (n == 0) break; /* illegal character */
/* it assumes that mbs is large enough to hold a character */
@ -265,10 +275,11 @@ qse_size_t qse_wcsntombsnlen (
const qse_wchar_t* end = wcs + wcslen;
qse_mchar_t mbs[32];
qse_size_t mlen = 0;
qse_mbstate_t state = {{ 0, }};
while (p < end)
{
qse_size_t n = qse_wctomb (*p, mbs, QSE_COUNTOF(mbs));
qse_size_t n = qse_wcrtomb (*p, mbs, QSE_COUNTOF(mbs), &state);
if (n == 0) break; /* illegal character */
/* it assumes that mbs is large enough to hold a character */
@ -291,10 +302,11 @@ qse_size_t qse_wcstombs (
{
const qse_wchar_t* p = wcs;
qse_size_t rem = *mbslen;
qse_mbstate_t state = {{ 0, }};
while (*p != QSE_WT('\0') && rem > 1)
{
qse_size_t n = qse_wctomb (*p, mbs, rem);
qse_size_t n = qse_wcrtomb (*p, mbs, rem, &state);
if (n == 0 || n > rem)
{
/* illegal character or buffer not enough */
@ -330,10 +342,11 @@ qse_size_t qse_wcsntombsn (
const qse_wchar_t* p = wcs;
const qse_wchar_t* end = wcs + wcslen;
qse_size_t len = *mbslen;
qse_mbstate_t state = {{ 0, }};
while (p < end && len > 0)
{
qse_size_t n = qse_wctomb (*p, mbs, len);
qse_size_t n = qse_wcrtomb (*p, mbs, len, &state);
if (n == 0 || n > len)
{
/* illegal character or buffer not enough */

View File

@ -1,5 +1,5 @@
/*
* $Id: tio_get.c 441 2011-04-22 14:28:43Z hyunghwan.chung $
* $Id: tio_get.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -79,7 +79,8 @@ static qse_ssize_t tio_getc (qse_tio_t* tio, qse_char_t* c)
#else
left = tio->inbuf_len - tio->inbuf_curp;
n = qse_mbtowc (&tio->inbuf[tio->inbuf_curp], left, &curc);
n = qse_mbrtowc (
&tio->inbuf[tio->inbuf_curp], left, &curc, &tio->mbstate.in);
if (n == 0)
{
/* illegal sequence */

View File

@ -1,5 +1,5 @@
/*
* $Id: tio_put.c 441 2011-04-22 14:28:43Z hyunghwan.chung $
* $Id: tio_put.c 554 2011-08-22 05:26:26Z hyunghwan.chung $
*
Copyright 2006-2011 Chung, Hyung-Hwan.
This file is part of QSE.
@ -23,9 +23,9 @@
static qse_ssize_t tio_putc (qse_tio_t* tio, qse_char_t c)
{
#ifndef QSE_CHAR_IS_MCHAR
#ifdef QSE_CHAR_IS_WCHAR
qse_size_t n, i;
qse_mchar_t mc[50];
qse_mchar_t mc[QSE_MBLEN_MAX];
#endif
if (tio->outbuf_len >= QSE_COUNTOF(tio->outbuf))
@ -38,12 +38,14 @@ static qse_ssize_t tio_putc (qse_tio_t* tio, qse_char_t c)
}
#ifdef QSE_CHAR_IS_MCHAR
tio->outbuf[tio->outbuf_len++] = c;
if (tio->outbuf_len >= QSE_COUNTOF(tio->outbuf))
return qse_tio_flush (tio);
#else
n = qse_wctomb (c, mc, QSE_COUNTOF(mc));
#else /* QSE_CHAR_IS_WCHAR */
n = qse_wcrtomb (c, mc, QSE_COUNTOF(mc), &tio->mbstate.out);
if (n == 0)
{
tio->errnum = QSE_TIO_EILCHR;
@ -63,6 +65,7 @@ static qse_ssize_t tio_putc (qse_tio_t* tio, qse_char_t c)
if (qse_tio_flush (tio) == -1) return -1;
}
}
#endif
if (c == QSE_T('\n') && tio->outbuf_len > 0)

View File

@ -521,6 +521,13 @@ static void* _realloc_merge (qse_xma_t* xma, void* b, qse_size_t size)
return b;
}
void* qse_xma_calloc (qse_xma_t* xma, qse_size_t size)
{
void* ptr = qse_xma_alloc (xma, size);
if (size) QSE_MEMSET (ptr, 0, size);
return ptr;
}
void* qse_xma_realloc (qse_xma_t* xma, void* b, qse_size_t size)
{
void* n;

View File

@ -38,10 +38,11 @@ host_triplet = @host@
subdir = lib/cut
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -167,7 +167,7 @@ void qse_cut_clear (qse_cut_t* cut)
int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
{
const qse_char_t* p = str;
const qse_char_t* xnd = str + len;
const qse_char_t* lastp = str + len;
qse_cint_t c;
int sel = QSE_SED_SEL_CHAR;
@ -189,13 +189,13 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
if (len <= 0) return 0;
/* compile the selector string */
xnd--; c = CC (p, xnd);
lastp--; c = CC (p, lastp);
while (1)
{
qse_size_t start = 0, end = 0;
int mask = 0;
while (QSE_ISSPACE(c)) c = NC (p, xnd);
while (QSE_ISSPACE(c)) c = NC (p, lastp);
if (EOF(c))
{
if (cut->sel.count > 0)
@ -212,7 +212,7 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
/* the next character is the input delimiter.
* the output delimiter defaults to the input
* delimiter. */
c = NC (p, xnd);
c = NC (p, lastp);
if (EOF(c))
{
SETERR0 (cut, QSE_CUT_ESELNV);
@ -221,13 +221,13 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
cut->sel.din = c;
cut->sel.dout = c;
c = NC (p, xnd);
c = NC (p, lastp);
}
else if (c == QSE_T('D'))
{
/* the next two characters are the input and
* the output delimiter each. */
c = NC (p, xnd);
c = NC (p, lastp);
if (EOF(c))
{
SETERR0 (cut, QSE_CUT_ESELNV);
@ -235,7 +235,7 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
}
cut->sel.din = c;
c = NC (p, xnd);
c = NC (p, lastp);
if (EOF(c))
{
SETERR0 (cut, QSE_CUT_ESELNV);
@ -243,15 +243,15 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
}
cut->sel.dout = c;
c = NC (p, xnd);
c = NC (p, lastp);
}
else
{
if (c == QSE_T('c') || c == QSE_T('f'))
{
sel = c;
c = NC (p, xnd);
while (QSE_ISSPACE(c)) c = NC (p, xnd);
c = NC (p, lastp);
while (QSE_ISSPACE(c)) c = NC (p, lastp);
}
if (QSE_ISDIGIT(c))
@ -259,33 +259,33 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
do
{
start = start * 10 + (c - QSE_T('0'));
c = NC (p, xnd);
c = NC (p, lastp);
}
while (QSE_ISDIGIT(c));
while (QSE_ISSPACE(c)) c = NC (p, xnd);
while (QSE_ISSPACE(c)) c = NC (p, lastp);
mask |= MASK_START;
}
else start++;
if (c == QSE_T('-'))
{
c = NC (p, xnd);
while (QSE_ISSPACE(c)) c = NC (p, xnd);
c = NC (p, lastp);
while (QSE_ISSPACE(c)) c = NC (p, lastp);
if (QSE_ISDIGIT(c))
{
do
{
end = end * 10 + (c - QSE_T('0'));
c = NC (p, xnd);
c = NC (p, lastp);
}
while (QSE_ISDIGIT(c));
mask |= MASK_END;
}
else end = MAX;
while (QSE_ISSPACE(c)) c = NC (p, xnd);
while (QSE_ISSPACE(c)) c = NC (p, lastp);
}
else end = start;
@ -313,7 +313,7 @@ int qse_cut_comp (qse_cut_t* cut, const qse_char_t* str, qse_size_t len)
}
if (EOF(c)) break;
if (c == QSE_T(',')) c = NC (p, xnd);
if (c == QSE_T(',')) c = NC (p, lastp);
}
return 0;

View File

@ -37,10 +37,11 @@ host_triplet = @host@
subdir = lib/net
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -38,10 +38,11 @@ host_triplet = @host@
subdir = lib/sed
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d

View File

@ -37,10 +37,11 @@ host_triplet = @host@
subdir = lib/stx
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_numval.m4 \
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d