added qse_strxtrmx()
added sys::trim(). allowed a singled quoted string in awk
This commit is contained in:
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user