renamed some utility functions
This commit is contained in:
parent
f5f8b9e2b4
commit
2332d6a4e7
@ -114,34 +114,6 @@ int mio_makesyshndasync (
|
|||||||
mio_syshnd_t hnd
|
mio_syshnd_t hnd
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
mio_bch_t* mio_mbsdup (
|
|
||||||
mio_t* mio,
|
|
||||||
const mio_bch_t* src
|
|
||||||
);
|
|
||||||
|
|
||||||
mio_oow_t mio_mbscpy (
|
|
||||||
mio_bch_t* buf,
|
|
||||||
const mio_bch_t* str
|
|
||||||
);
|
|
||||||
|
|
||||||
int mio_mbsspltrn (
|
|
||||||
mio_bch_t* s,
|
|
||||||
const mio_bch_t* delim,
|
|
||||||
mio_bch_t lquote,
|
|
||||||
mio_bch_t rquote,
|
|
||||||
mio_bch_t escape,
|
|
||||||
const mio_bch_t* trset
|
|
||||||
);
|
|
||||||
|
|
||||||
int mio_mbsspl (
|
|
||||||
mio_bch_t* s,
|
|
||||||
const mio_bch_t* delim,
|
|
||||||
mio_bch_t lquote,
|
|
||||||
mio_bch_t rquote,
|
|
||||||
mio_bch_t escape
|
|
||||||
);
|
|
||||||
|
|
||||||
void mio_cleartmrjobs (
|
void mio_cleartmrjobs (
|
||||||
mio_t* mio
|
mio_t* mio
|
||||||
);
|
);
|
||||||
|
@ -345,6 +345,22 @@ MIO_EXPORT mio_bch_t* mio_find_bchar_in_bcstr (
|
|||||||
mio_bch_t c
|
mio_bch_t c
|
||||||
);
|
);
|
||||||
|
|
||||||
|
MIO_EXPORT int mio_split_ucstr (
|
||||||
|
mio_uch_t* s,
|
||||||
|
const mio_uch_t* delim,
|
||||||
|
mio_uch_t lquote,
|
||||||
|
mio_uch_t rquote,
|
||||||
|
mio_uch_t escape
|
||||||
|
);
|
||||||
|
|
||||||
|
MIO_EXPORT int mio_split_bcstr (
|
||||||
|
mio_bch_t* s,
|
||||||
|
const mio_bch_t* delim,
|
||||||
|
mio_bch_t lquote,
|
||||||
|
mio_bch_t rquote,
|
||||||
|
mio_bch_t escape
|
||||||
|
);
|
||||||
|
|
||||||
MIO_EXPORT mio_oow_t mio_count_ucstr (
|
MIO_EXPORT mio_oow_t mio_count_ucstr (
|
||||||
const mio_uch_t* str
|
const mio_uch_t* str
|
||||||
);
|
);
|
||||||
@ -362,7 +378,6 @@ MIO_EXPORT mio_oow_t mio_count_bcstr (
|
|||||||
# define mio_comp_oochars_oocstr(str1,len1,str2) mio_comp_uchars_ucstr(str1,len1,str2)
|
# define mio_comp_oochars_oocstr(str1,len1,str2) mio_comp_uchars_ucstr(str1,len1,str2)
|
||||||
# define mio_comp_oocstr(str1,str2) mio_comp_ucstr(str1,str2)
|
# define mio_comp_oocstr(str1,str2) mio_comp_ucstr(str1,str2)
|
||||||
|
|
||||||
|
|
||||||
# define mio_copy_oochars mio_copy_uchars
|
# define mio_copy_oochars mio_copy_uchars
|
||||||
# define mio_copy_bchars_to_oochars mio_copy_bchars_to_uchars
|
# define mio_copy_bchars_to_oochars mio_copy_bchars_to_uchars
|
||||||
# define mio_copy_oochars_to_bchars mio_copy_uchars_to_bchars
|
# define mio_copy_oochars_to_bchars mio_copy_uchars_to_bchars
|
||||||
@ -378,7 +393,9 @@ MIO_EXPORT mio_oow_t mio_count_bcstr (
|
|||||||
# define mio_find_oochar(ptr,len,c) mio_find_uchar(ptr,len,c)
|
# define mio_find_oochar(ptr,len,c) mio_find_uchar(ptr,len,c)
|
||||||
# define mio_rfind_oochar(ptr,len,c) mio_rfind_uchar(ptr,len,c)
|
# define mio_rfind_oochar(ptr,len,c) mio_rfind_uchar(ptr,len,c)
|
||||||
# define mio_find_oochar_in_oocstr(ptr,c) mio_find_uchar_in_ucstr(ptr,c)
|
# define mio_find_oochar_in_oocstr(ptr,c) mio_find_uchar_in_ucstr(ptr,c)
|
||||||
# define mio_count_oocstr(str) mio_count_ucstr(str)
|
|
||||||
|
# define mio_split_oocstr mio_split_ucstr
|
||||||
|
# define mio_count_oocstr mio_count_ucstr
|
||||||
#else
|
#else
|
||||||
# define mio_equal_oochars(str1,str2,len) mio_equal_bchars(str1,str2,len)
|
# define mio_equal_oochars(str1,str2,len) mio_equal_bchars(str1,str2,len)
|
||||||
# define mio_comp_oochars(str1,len1,str2,len2) mio_comp_bchars(str1,len1,str2,len2)
|
# define mio_comp_oochars(str1,len1,str2,len2) mio_comp_bchars(str1,len1,str2,len2)
|
||||||
@ -403,7 +420,9 @@ MIO_EXPORT mio_oow_t mio_count_bcstr (
|
|||||||
# define mio_find_oochar(ptr,len,c) mio_find_bchar(ptr,len,c)
|
# define mio_find_oochar(ptr,len,c) mio_find_bchar(ptr,len,c)
|
||||||
# define mio_rfind_oochar(ptr,len,c) mio_rfind_bchar(ptr,len,c)
|
# define mio_rfind_oochar(ptr,len,c) mio_rfind_bchar(ptr,len,c)
|
||||||
# define mio_find_oochar_in_oocstr(ptr,c) mio_find_bchar_in_bcstr(ptr,c)
|
# define mio_find_oochar_in_oocstr(ptr,c) mio_find_bchar_in_bcstr(ptr,c)
|
||||||
# define mio_count_oocstr(str) mio_count_bcstr(str)
|
|
||||||
|
# define mio_split_oocstr mio_split_bcstr
|
||||||
|
# define mio_count_oocstr mio_count_bcstr
|
||||||
#endif
|
#endif
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
@ -1029,11 +1029,6 @@ MIO_EXPORT mio_bch_t* mio_duputobcstr (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
#if defined(MIO_OOCH_IS_UCH)
|
|
||||||
# define mio_dupoochars(mio,oocs,oocslen) mio_dupuchars(mio,oocs,oocslen)
|
|
||||||
#else
|
|
||||||
# define mio_dupoochars(mio,oocs,oocslen) mio_dupbchars(mio,oocs,oocslen)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MIO_EXPORT mio_uch_t* mio_dupuchars (
|
MIO_EXPORT mio_uch_t* mio_dupuchars (
|
||||||
mio_t* mio,
|
mio_t* mio,
|
||||||
@ -1048,6 +1043,27 @@ MIO_EXPORT mio_bch_t* mio_dupbchars (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
MIO_EXPORT mio_uch_t* mio_dupucstr (
|
||||||
|
mio_t* mio,
|
||||||
|
const mio_uch_t* ucs,
|
||||||
|
mio_oow_t* ucslen /* [OUT] length*/
|
||||||
|
);
|
||||||
|
|
||||||
|
MIO_EXPORT mio_bch_t* mio_dupbcstr (
|
||||||
|
mio_t* mio,
|
||||||
|
const mio_bch_t* bcs,
|
||||||
|
mio_oow_t* bcslen /* [OUT] length */
|
||||||
|
);
|
||||||
|
|
||||||
|
#if defined(MIO_OOCH_IS_UCH)
|
||||||
|
# define mio_dupoochars(mio,oocs,oocslen) mio_dupuchars(mio,oocs,oocslen)
|
||||||
|
# define mio_dupoocstr(mio,oocs,oocslen) mio_dupucstr(mio,oocs,oocslen)
|
||||||
|
#else
|
||||||
|
# define mio_dupoochars(mio,oocs,oocslen) mio_dupbchars(mio,oocs,oocslen)
|
||||||
|
# define mio_dupoocstr(mio,oocs,oocslen) mio_dupbcstr(mio,oocs,oocslen)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* =========================================================================
|
/* =========================================================================
|
||||||
* MIO VM LOGGING
|
* MIO VM LOGGING
|
||||||
* ========================================================================= */
|
* ========================================================================= */
|
||||||
|
@ -88,10 +88,10 @@ static int make_param (mio_t* mio, const mio_bch_t* cmd, int flags, param_t* par
|
|||||||
mio_bch_t** argv;
|
mio_bch_t** argv;
|
||||||
mio_bch_t* mcmdptr;
|
mio_bch_t* mcmdptr;
|
||||||
|
|
||||||
mcmd = mio_mbsdup (mio, cmd);
|
mcmd = mio_dupbcstr(mio, cmd, MIO_NULL);
|
||||||
if (!mcmd) goto oops;
|
if (!mcmd) goto oops;
|
||||||
|
|
||||||
fcnt = mio_mbsspl(mcmd, "", '\"', '\"', '\\');
|
fcnt = mio_split_bcstr(mcmd, "", '\"', '\"', '\\');
|
||||||
if (fcnt <= 0)
|
if (fcnt <= 0)
|
||||||
{
|
{
|
||||||
/* no field or an error */
|
/* no field or an error */
|
||||||
|
832
mio/lib/utl.c
832
mio/lib/utl.c
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*m
|
||||||
* $Id$
|
* $Id$
|
||||||
*
|
*
|
||||||
Copyright (c) 2015-2016 Chung, Hyung-Hwan. All rights reserved.
|
Copyright (c) 2015-2016 Chung, Hyung-Hwan. All rights reserved.
|
||||||
@ -26,319 +26,6 @@
|
|||||||
|
|
||||||
#include "mio-prv.h"
|
#include "mio-prv.h"
|
||||||
|
|
||||||
|
|
||||||
#define MIO_MT(x) (x)
|
|
||||||
#define IS_MSPACE(x) ((x) == MIO_MT(' ') || (x) == MIO_MT('\t') || (x) == MIO_MT('\n') || (x) == MIO_MT('\r'))
|
|
||||||
|
|
||||||
mio_bch_t* mio_mbsdup (mio_t* mio, const mio_bch_t* src)
|
|
||||||
{
|
|
||||||
mio_bch_t* dst;
|
|
||||||
mio_oow_t len;
|
|
||||||
|
|
||||||
dst = (mio_bch_t*)src;
|
|
||||||
while (*dst != MIO_MT('\0')) dst++;
|
|
||||||
len = dst - src;
|
|
||||||
|
|
||||||
dst = mio_allocmem(mio, (len + 1) * MIO_SIZEOF(*src));
|
|
||||||
if (!dst) return MIO_NULL;
|
|
||||||
|
|
||||||
MIO_MEMCPY (dst, src, (len + 1) * MIO_SIZEOF(*src));
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
mio_oow_t mio_mbscpy (mio_bch_t* buf, const mio_bch_t* str)
|
|
||||||
{
|
|
||||||
mio_bch_t* org = buf;
|
|
||||||
while ((*buf++ = *str++) != MIO_MT('\0'));
|
|
||||||
return buf - org - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mio_mbsspltrn (
|
|
||||||
mio_bch_t* s, const mio_bch_t* delim,
|
|
||||||
mio_bch_t lquote, mio_bch_t rquote,
|
|
||||||
mio_bch_t escape, const mio_bch_t* trset)
|
|
||||||
{
|
|
||||||
mio_bch_t* p = s, *d;
|
|
||||||
mio_bch_t* sp = MIO_NULL, * ep = MIO_NULL;
|
|
||||||
int delim_mode;
|
|
||||||
int cnt = 0;
|
|
||||||
|
|
||||||
if (delim == MIO_NULL) delim_mode = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
delim_mode = 1;
|
|
||||||
for (d = (mio_bch_t*)delim; *d != MIO_MT('\0'); d++)
|
|
||||||
if (!IS_MSPACE(*d)) delim_mode = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (delim_mode == 0)
|
|
||||||
{
|
|
||||||
/* skip preceding space characters */
|
|
||||||
while (IS_MSPACE(*p)) p++;
|
|
||||||
|
|
||||||
/* when 0 is given as "delim", it has an effect of cutting
|
|
||||||
preceding and trailing space characters off "s". */
|
|
||||||
if (lquote != MIO_MT('\0') && *p == lquote)
|
|
||||||
{
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (*p == MIO_MT('\0')) return -1;
|
|
||||||
|
|
||||||
if (escape != MIO_MT('\0') && *p == escape)
|
|
||||||
{
|
|
||||||
if (trset != MIO_NULL && p[1] != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
const mio_bch_t* ep = trset;
|
|
||||||
while (*ep != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
if (p[1] == *ep++)
|
|
||||||
{
|
|
||||||
p[1] = *ep;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (*p == rquote)
|
|
||||||
{
|
|
||||||
p++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sp == 0) sp = p;
|
|
||||||
ep = p;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
while (IS_MSPACE(*p)) p++;
|
|
||||||
if (*p != MIO_MT('\0')) return -1;
|
|
||||||
|
|
||||||
if (sp == 0 && ep == 0) s[0] = MIO_MT('\0');
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep[1] = MIO_MT('\0');
|
|
||||||
if (s != (mio_bch_t*)sp) mio_mbscpy (s, sp);
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
while (*p)
|
|
||||||
{
|
|
||||||
if (!IS_MSPACE(*p))
|
|
||||||
{
|
|
||||||
if (sp == 0) sp = p;
|
|
||||||
ep = p;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sp == 0 && ep == 0) s[0] = MIO_MT('\0');
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep[1] = MIO_MT('\0');
|
|
||||||
if (s != (mio_bch_t*)sp) mio_mbscpy (s, sp);
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (delim_mode == 1)
|
|
||||||
{
|
|
||||||
mio_bch_t* o;
|
|
||||||
|
|
||||||
while (*p)
|
|
||||||
{
|
|
||||||
o = p;
|
|
||||||
while (IS_MSPACE(*p)) p++;
|
|
||||||
if (o != p) { mio_mbscpy (o, p); p = o; }
|
|
||||||
|
|
||||||
if (lquote != MIO_MT('\0') && *p == lquote)
|
|
||||||
{
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (*p == MIO_MT('\0')) return -1;
|
|
||||||
|
|
||||||
if (escape != MIO_MT('\0') && *p == escape)
|
|
||||||
{
|
|
||||||
if (trset != MIO_NULL && p[1] != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
const mio_bch_t* ep = trset;
|
|
||||||
while (*ep != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
if (p[1] == *ep++)
|
|
||||||
{
|
|
||||||
p[1] = *ep;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (*p == rquote)
|
|
||||||
{
|
|
||||||
*p++ = MIO_MT('\0');
|
|
||||||
cnt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
o = p;
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (*p == MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
if (o != p) cnt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (IS_MSPACE (*p))
|
|
||||||
{
|
|
||||||
*p++ = MIO_MT('\0');
|
|
||||||
cnt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* if (delim_mode == 2) */
|
|
||||||
{
|
|
||||||
mio_bch_t* o;
|
|
||||||
int ok;
|
|
||||||
|
|
||||||
while (*p != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
o = p;
|
|
||||||
while (IS_MSPACE(*p)) p++;
|
|
||||||
if (o != p) { mio_mbscpy (o, p); p = o; }
|
|
||||||
|
|
||||||
if (lquote != MIO_MT('\0') && *p == lquote)
|
|
||||||
{
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (*p == MIO_MT('\0')) return -1;
|
|
||||||
|
|
||||||
if (escape != MIO_MT('\0') && *p == escape)
|
|
||||||
{
|
|
||||||
if (trset != MIO_NULL && p[1] != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
const mio_bch_t* ep = trset;
|
|
||||||
while (*ep != MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
if (p[1] == *ep++)
|
|
||||||
{
|
|
||||||
p[1] = *ep;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (*p == rquote)
|
|
||||||
{
|
|
||||||
*p++ = MIO_MT('\0');
|
|
||||||
cnt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = 0;
|
|
||||||
while (IS_MSPACE(*p)) p++;
|
|
||||||
if (*p == MIO_MT('\0')) ok = 1;
|
|
||||||
for (d = (mio_bch_t*)delim; *d != MIO_MT('\0'); d++)
|
|
||||||
{
|
|
||||||
if (*p == *d)
|
|
||||||
{
|
|
||||||
ok = 1;
|
|
||||||
mio_mbscpy (p, p + 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ok == 0) return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
o = p; sp = ep = 0;
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
if (*p == MIO_MT('\0'))
|
|
||||||
{
|
|
||||||
if (ep)
|
|
||||||
{
|
|
||||||
ep[1] = MIO_MT('\0');
|
|
||||||
p = &ep[1];
|
|
||||||
}
|
|
||||||
cnt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (d = (mio_bch_t*)delim; *d != MIO_MT('\0'); d++)
|
|
||||||
{
|
|
||||||
if (*p == *d)
|
|
||||||
{
|
|
||||||
if (sp == MIO_NULL)
|
|
||||||
{
|
|
||||||
mio_mbscpy (o, p); p = o;
|
|
||||||
*p++ = MIO_MT('\0');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mio_mbscpy (&ep[1], p);
|
|
||||||
mio_mbscpy (o, sp);
|
|
||||||
o[ep - sp + 1] = MIO_MT('\0');
|
|
||||||
p = &o[ep - sp + 2];
|
|
||||||
}
|
|
||||||
cnt++;
|
|
||||||
/* last empty field after delim */
|
|
||||||
if (*p == MIO_MT('\0')) cnt++;
|
|
||||||
goto exit_point;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IS_MSPACE (*p))
|
|
||||||
{
|
|
||||||
if (sp == MIO_NULL) sp = p;
|
|
||||||
ep = p;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
exit_point:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mio_mbsspl (
|
|
||||||
mio_bch_t* s, const mio_bch_t* delim,
|
|
||||||
mio_bch_t lquote, mio_bch_t rquote, mio_bch_t escape)
|
|
||||||
{
|
|
||||||
return mio_mbsspltrn (s, delim, lquote, rquote, escape, MIO_NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
int mio_equal_uchars (const mio_uch_t* str1, const mio_uch_t* str2, mio_oow_t len)
|
int mio_equal_uchars (const mio_uch_t* str1, const mio_uch_t* str2, mio_oow_t len)
|
||||||
@ -716,6 +403,486 @@ mio_bch_t* mio_find_bchar_in_bcstr (const mio_bch_t* ptr, mio_bch_t c)
|
|||||||
return MIO_NULL;
|
return MIO_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
#define IS_UCH_SPACE(x) ((x) ==' ' || (x) == '\t' || (x) == '\n' || (x) == '\r')
|
||||||
|
#define IS_BCH_SPACE(x) ((x) ==' ' || (x) == '\t' || (x) == '\n' || (x) == '\r')
|
||||||
|
|
||||||
|
int mio_split_ucstr (mio_uch_t* s, const mio_uch_t* delim, mio_uch_t lquote, mio_uch_t rquote, mio_uch_t escape)
|
||||||
|
{
|
||||||
|
mio_uch_t* p = s, *d;
|
||||||
|
mio_uch_t* sp = MIO_NULL, * ep = MIO_NULL;
|
||||||
|
int delim_mode;
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
|
if (delim == MIO_NULL) delim_mode = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delim_mode = 1;
|
||||||
|
for (d = (mio_uch_t*)delim; *d != '\0'; d++)
|
||||||
|
if (!IS_UCH_SPACE(*d)) delim_mode = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delim_mode == 0)
|
||||||
|
{
|
||||||
|
/* skip preceding space characters */
|
||||||
|
while (IS_UCH_SPACE(*p)) p++;
|
||||||
|
|
||||||
|
/* when 0 is given as "delim", it has an effect of cutting
|
||||||
|
preceding and trailing space characters off "s". */
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sp == 0) sp = p;
|
||||||
|
ep = p;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
while (IS_UCH_SPACE(*p)) p++;
|
||||||
|
if (*p != '\0') return -1;
|
||||||
|
|
||||||
|
if (sp == 0 && ep == 0) s[0] = '\0';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
if (s != (mio_uch_t*)sp) mio_copy_ucstr_unlimited (s, sp);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (!IS_UCH_SPACE(*p))
|
||||||
|
{
|
||||||
|
if (sp == 0) sp = p;
|
||||||
|
ep = p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sp == 0 && ep == 0) s[0] = '\0';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
if (s != (mio_uch_t*)sp) mio_copy_ucstr_unlimited (s, sp);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (delim_mode == 1)
|
||||||
|
{
|
||||||
|
mio_uch_t* o;
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
while (IS_UCH_SPACE(*p)) p++;
|
||||||
|
if (o != p) { mio_copy_ucstr_unlimited (o, p); p = o; }
|
||||||
|
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0')
|
||||||
|
{
|
||||||
|
if (o != p) cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (IS_UCH_SPACE (*p))
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* if (delim_mode == 2) */
|
||||||
|
{
|
||||||
|
mio_uch_t* o;
|
||||||
|
int ok;
|
||||||
|
|
||||||
|
while (*p != '\0')
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
while (IS_UCH_SPACE(*p)) p++;
|
||||||
|
if (o != p) { mio_copy_ucstr_unlimited (o, p); p = o; }
|
||||||
|
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = 0;
|
||||||
|
while (IS_UCH_SPACE(*p)) p++;
|
||||||
|
if (*p == '\0') ok = 1;
|
||||||
|
for (d = (mio_uch_t*)delim; *d != '\0'; d++)
|
||||||
|
{
|
||||||
|
if (*p == *d)
|
||||||
|
{
|
||||||
|
ok = 1;
|
||||||
|
mio_copy_ucstr_unlimited (p, p + 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok == 0) return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o = p; sp = ep = 0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0')
|
||||||
|
{
|
||||||
|
if (ep)
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
p = &ep[1];
|
||||||
|
}
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (d = (mio_uch_t*)delim; *d != '\0'; d++)
|
||||||
|
{
|
||||||
|
if (*p == *d)
|
||||||
|
{
|
||||||
|
if (sp == MIO_NULL)
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (o, p); p = o;
|
||||||
|
*p++ = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mio_copy_ucstr_unlimited (&ep[1], p);
|
||||||
|
mio_copy_ucstr_unlimited (o, sp);
|
||||||
|
o[ep - sp + 1] = '\0';
|
||||||
|
p = &o[ep - sp + 2];
|
||||||
|
}
|
||||||
|
cnt++;
|
||||||
|
/* last empty field after delim */
|
||||||
|
if (*p == '\0') cnt++;
|
||||||
|
goto exit_point;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_UCH_SPACE (*p))
|
||||||
|
{
|
||||||
|
if (sp == MIO_NULL) sp = p;
|
||||||
|
ep = p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
exit_point:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mio_split_bcstr (mio_bch_t* s, const mio_bch_t* delim, mio_bch_t lquote, mio_bch_t rquote, mio_bch_t escape)
|
||||||
|
{
|
||||||
|
mio_bch_t* p = s, *d;
|
||||||
|
mio_bch_t* sp = MIO_NULL, * ep = MIO_NULL;
|
||||||
|
int delim_mode;
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
|
if (delim == MIO_NULL) delim_mode = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delim_mode = 1;
|
||||||
|
for (d = (mio_bch_t*)delim; *d != '\0'; d++)
|
||||||
|
if (!IS_BCH_SPACE(*d)) delim_mode = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delim_mode == 0)
|
||||||
|
{
|
||||||
|
/* skip preceding space characters */
|
||||||
|
while (IS_BCH_SPACE(*p)) p++;
|
||||||
|
|
||||||
|
/* when 0 is given as "delim", it has an effect of cutting
|
||||||
|
preceding and trailing space characters off "s". */
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sp == 0) sp = p;
|
||||||
|
ep = p;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
while (IS_BCH_SPACE(*p)) p++;
|
||||||
|
if (*p != '\0') return -1;
|
||||||
|
|
||||||
|
if (sp == 0 && ep == 0) s[0] = '\0';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
if (s != (mio_bch_t*)sp) mio_copy_bcstr_unlimited (s, sp);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (!IS_BCH_SPACE(*p))
|
||||||
|
{
|
||||||
|
if (sp == 0) sp = p;
|
||||||
|
ep = p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sp == 0 && ep == 0) s[0] = '\0';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
if (s != (mio_bch_t*)sp) mio_copy_bcstr_unlimited (s, sp);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (delim_mode == 1)
|
||||||
|
{
|
||||||
|
mio_bch_t* o;
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
while (IS_BCH_SPACE(*p)) p++;
|
||||||
|
if (o != p) { mio_copy_bcstr_unlimited (o, p); p = o; }
|
||||||
|
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0')
|
||||||
|
{
|
||||||
|
if (o != p) cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (IS_BCH_SPACE (*p))
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* if (delim_mode == 2) */
|
||||||
|
{
|
||||||
|
mio_bch_t* o;
|
||||||
|
int ok;
|
||||||
|
|
||||||
|
while (*p != '\0')
|
||||||
|
{
|
||||||
|
o = p;
|
||||||
|
while (IS_BCH_SPACE(*p)) p++;
|
||||||
|
if (o != p) { mio_copy_bcstr_unlimited (o, p); p = o; }
|
||||||
|
|
||||||
|
if (lquote != '\0' && *p == lquote)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0') return -1;
|
||||||
|
|
||||||
|
if (escape != '\0' && *p == escape)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == rquote)
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = 0;
|
||||||
|
while (IS_BCH_SPACE(*p)) p++;
|
||||||
|
if (*p == '\0') ok = 1;
|
||||||
|
for (d = (mio_bch_t*)delim; *d != '\0'; d++)
|
||||||
|
{
|
||||||
|
if (*p == *d)
|
||||||
|
{
|
||||||
|
ok = 1;
|
||||||
|
mio_copy_bcstr_unlimited (p, p + 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok == 0) return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
o = p; sp = ep = 0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*p == '\0')
|
||||||
|
{
|
||||||
|
if (ep)
|
||||||
|
{
|
||||||
|
ep[1] = '\0';
|
||||||
|
p = &ep[1];
|
||||||
|
}
|
||||||
|
cnt++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (d = (mio_bch_t*)delim; *d != '\0'; d++)
|
||||||
|
{
|
||||||
|
if (*p == *d)
|
||||||
|
{
|
||||||
|
if (sp == MIO_NULL)
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (o, p); p = o;
|
||||||
|
*p++ = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mio_copy_bcstr_unlimited (&ep[1], p);
|
||||||
|
mio_copy_bcstr_unlimited (o, sp);
|
||||||
|
o[ep - sp + 1] = '\0';
|
||||||
|
p = &o[ep - sp + 2];
|
||||||
|
}
|
||||||
|
cnt++;
|
||||||
|
/* last empty field after delim */
|
||||||
|
if (*p == '\0') cnt++;
|
||||||
|
goto exit_point;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_BCH_SPACE (*p))
|
||||||
|
{
|
||||||
|
if (sp == MIO_NULL) sp = p;
|
||||||
|
ep = p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
exit_point:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
mio_oow_t mio_byte_to_bcstr (mio_uint8_t byte, mio_bch_t* buf, mio_oow_t size, int flagged_radix, mio_bch_t fill)
|
mio_oow_t mio_byte_to_bcstr (mio_uint8_t byte, mio_bch_t* buf, mio_oow_t size, int flagged_radix, mio_bch_t fill)
|
||||||
@ -1292,4 +1459,41 @@ mio_bch_t* mio_dupbchars (mio_t* mio, const mio_bch_t* bcs, mio_oow_t bcslen)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
mio_uch_t* mio_dupucstr (mio_t* mio, const mio_uch_t* ucs, mio_oow_t* ucslen)
|
||||||
|
{
|
||||||
|
mio_uch_t* ptr;
|
||||||
|
mio_oow_t len;
|
||||||
|
|
||||||
|
len = mio_count_ucstr(ucs);
|
||||||
|
|
||||||
|
ptr = (mio_uch_t*)mio_allocmem(mio, (len + 1) * MIO_SIZEOF(mio_uch_t));
|
||||||
|
if (!ptr) return MIO_NULL;
|
||||||
|
|
||||||
|
mio_copy_uchars (ptr, ucs, len);
|
||||||
|
ptr[len] = '\0';
|
||||||
|
|
||||||
|
if (ucslen) *ucslen = len;
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
mio_bch_t* mio_dupbcstr (mio_t* mio, const mio_bch_t* bcs, mio_oow_t* bcslen)
|
||||||
|
{
|
||||||
|
mio_bch_t* ptr;
|
||||||
|
mio_oow_t len;
|
||||||
|
|
||||||
|
len = mio_count_bcstr(bcs);
|
||||||
|
|
||||||
|
ptr = (mio_bch_t*)mio_allocmem(mio, (len + 1) * MIO_SIZEOF(mio_bch_t));
|
||||||
|
if (!ptr) return MIO_NULL;
|
||||||
|
|
||||||
|
mio_copy_bchars (ptr, bcs, len);
|
||||||
|
ptr[len] = '\0';
|
||||||
|
|
||||||
|
if (bcslen) *bcslen = len;
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user