added qse_strxtrmx()

added sys::trim().
allowed a singled quoted string in awk
This commit is contained in:
2012-11-23 17:11:06 +00:00
parent f04bea44e1
commit 1ad89afa99
8 changed files with 433 additions and 90 deletions

View File

@ -5566,7 +5566,7 @@ static int get_string (
return 0;
}
static int get_charstr (qse_awk_t* awk, qse_awk_tok_t* tok)
static int get_charstr (qse_awk_t* awk, qse_awk_tok_t* tok, qse_char_t c)
{
if (awk->sio.last.c != QSE_T('\"'))
{
@ -5961,10 +5961,11 @@ retry:
type = classify_ident (awk, QSE_STR_CSTR(tok->name));
SET_TOKEN_TYPE (awk, tok, type);
}
else if (c == QSE_T('\"'))
else if (c == QSE_T('\"') || c == QSE_T('\''))
{
SET_TOKEN_TYPE (awk, tok, TOK_STR);
if (get_charstr(awk, tok) <= -1) return -1;
/*if (get_charstr(awk, tok, c) <= -1) return -1;*/
if (get_string (awk, c, QSE_T('\\'), 0, 0, tok) <= -1) return -1;
}
else
{

View File

@ -274,6 +274,29 @@ void qse_freenwifcfg (qse_nwifcfg_t* cfg)
#endif
#if defined(__linux)
static void read_proc_net_if_inet6 (qse_nwifcfg_t* cfg, struct ifreq* ifr)
{
#if 0
qse_sio_t* sio;
qse_mchar_t line[128];
/* TODO */
sio = qse_sio_open (QSE_MMGR_GETDFL(), 0,
QSE_T("proc/net/if_inet6"), QSE_SIO_IGNOREMBWCERR | QSE_SIO_READ);
if (sio)
{
qse_ssize_t x;
while (1)
{
x = qse_sio_getmbs (sio, line, QSE_COUNTOF(line));
if (x == -1) break;
}
qse_sio_close (sio);
}
#endif
}
#endif
static int get_nwifcfg (int s, qse_nwifcfg_t* cfg, struct ifreq* ifr)
{
@ -488,10 +511,19 @@ static int get_nwifcfg (int s, qse_nwifcfg_t* cfg, struct ifreq* ifr)
if (ioctl (s, SIOCGIFADDR, ifr) >= 0)
qse_skadtonwad (&ifr->ifr_addr, &cfg->addr);
if (ioctl (s, SIOCGIFNETMASK, ifr) >= 0)
qse_skadtonwad (&ifr->ifr_addr, &cfg->mask);
#if defined(__linux)
if (cfg->addr.type == QSE_NWAD_NX && cfg->mask.type == QSE_NWAD_NX)
{
/* access /proc/net/if_inet6 */
read_proc_net_if_inet6 (cfg, ifr);
}
#endif
if ((cfg->flags & QSE_NWIFCFG_BCAST) &&
ioctl (s, SIOCGIFBRDADDR, ifr) >= 0)
{
@ -589,6 +621,9 @@ for (i = 0; i < drvinfo.n_stats; i++)
#endif
}
/* TOOD: consider how to handle multiple IPv6 addresses on a single interfce.
* consider how to get IPv4 addresses on an aliased interface? so mutliple ipv4 addresses */
int qse_getnwifcfg (qse_nwifcfg_t* cfg)
{
#if defined(_WIN32)

View File

@ -25,24 +25,162 @@
qse_mchar_t* qse_mbstrmx (qse_mchar_t* str, int opt)
{
qse_mchar_t* p = str;
qse_mchar_t* s = QSE_NULL, * e = QSE_NULL;
while (*p != QSE_MT('\0'))
if (*p != QSE_MT('\0'))
{
if (!QSE_ISMSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
qse_mchar_t* s = QSE_NULL, * e = QSE_NULL;
if (opt & QSE_MBSTRMX_RIGHT) e[1] = QSE_MT('\0');
if (opt & QSE_MBSTRMX_LEFT) str = s;
do
{
if (!QSE_ISMSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
while (*p != QSE_MT('\0'));
if (e)
{
if (opt & QSE_MBSTRMX_RIGHT) e[1] = QSE_MT('\0');
if (opt & QSE_MBSTRMX_LEFT) str = s;
}
else
{
/* the entire string need to ne deleted */
if ((opt & QSE_MBSTRMX_RIGHT) ||
(opt && QSE_MBSTRMX_LEFT)) str[0] = QSE_MT('\0');
}
}
return str;
}
qse_mchar_t* qse_mbsxtrmx (qse_mchar_t* str, qse_size_t* len, int opt)
{
qse_mchar_t* p = str, * end = str + *len;
if (p < end)
{
qse_mchar_t* s = QSE_NULL, * e = QSE_NULL;
do
{
if (!QSE_ISMSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
while (p < end);
if (e)
{
if (opt & QSE_MBSTRMX_RIGHT)
{
*len -= end - e - 1;
}
if (opt & QSE_MBSTRMX_LEFT)
{
*len -= s - str;
str = s;
}
}
else
{
/* the entire string need to ne deleted */
if ((opt & QSE_MBSTRMX_RIGHT) ||
(opt && QSE_MBSTRMX_LEFT)) *len = 0;
}
}
return str;
}
qse_wchar_t* qse_wcstrmx (qse_wchar_t* str, int opt)
{
qse_wchar_t* p = str;
if (*p != QSE_MT('\0'))
{
qse_wchar_t* s = QSE_NULL, * e = QSE_NULL;
do
{
if (!QSE_ISWSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
while (*p != QSE_MT('\0'));
if (e)
{
if (opt & QSE_WCSTRMX_RIGHT) e[1] = QSE_MT('\0');
if (opt & QSE_WCSTRMX_LEFT) str = s;
}
else
{
/* the entire string need to ne deleted */
if ((opt & QSE_WCSTRMX_RIGHT) ||
(opt && QSE_WCSTRMX_LEFT)) str[0] = QSE_MT('\0');
}
}
return str;
}
qse_wchar_t* qse_wcsxtrmx (qse_wchar_t* str, qse_size_t* len, int opt)
{
qse_wchar_t* p = str, * end = str + *len;
if (p < end)
{
qse_wchar_t* s = QSE_NULL, * e = QSE_NULL;
do
{
if (!QSE_ISWSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
while (p < end);
if (e)
{
if (opt & QSE_WCSTRMX_RIGHT)
{
*len -= end - e - 1;
}
if (opt & QSE_WCSTRMX_LEFT)
{
*len -= s - str;
str = s;
}
}
else
{
/* the entire string need to ne deleted */
if ((opt & QSE_WCSTRMX_RIGHT) ||
(opt && QSE_WCSTRMX_LEFT)) *len = 0;
}
}
return str;
}
/* -------------------------------------------------------------- */
qse_size_t qse_mbstrm (qse_mchar_t* str)
{
qse_mchar_t* p = str;
@ -58,7 +196,7 @@ qse_size_t qse_mbstrm (qse_mchar_t* str)
p++;
}
if (e != QSE_NULL)
if (e)
{
e[1] = QSE_MT('\0');
if (str != s)
@ -99,27 +237,6 @@ qse_size_t qse_mbsxtrm (qse_mchar_t* str, qse_size_t len)
return 0;
}
qse_wchar_t* qse_wcstrmx (qse_wchar_t* str, int opt)
{
qse_wchar_t* p = str;
qse_wchar_t* s = QSE_NULL, * e = QSE_NULL;
while (*p != QSE_MT('\0'))
{
if (!QSE_ISWSPACE(*p))
{
if (s == QSE_NULL) s = p;
e = p;
}
p++;
}
if (opt & QSE_WCSTRMX_RIGHT) e[1] = QSE_MT('\0');
if (opt & QSE_WCSTRMX_LEFT) str = s;
return str;
}
qse_size_t qse_wcstrm (qse_wchar_t* str)
{
qse_wchar_t* p = str;
@ -135,7 +252,7 @@ qse_size_t qse_wcstrm (qse_wchar_t* str)
p++;
}
if (e != QSE_NULL)
if (e)
{
e[1] = QSE_MT('\0');
if (str != s)