renamed some utility functions

This commit is contained in:
hyung-hwan 2020-02-20 14:59:49 +00:00
parent f5f8b9e2b4
commit 2332d6a4e7
5 changed files with 563 additions and 352 deletions

View File

@ -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
); );

View File

@ -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
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */

View File

@ -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
* ========================================================================= */ * ========================================================================= */

View File

@ -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 */

View File

@ -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;
}
/* ========================================================================= */ /* ========================================================================= */