refactoring
This commit is contained in:
parent
446925bcbf
commit
40d8800dab
@ -21,6 +21,6 @@ bin_PROGRAMS = hawk
|
|||||||
hawk_SOURCES = main.c
|
hawk_SOURCES = main.c
|
||||||
hawk_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
|
hawk_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
|
||||||
hawk_LDFLAGS = $(LDFLAGS_ALL_COMMON)
|
hawk_LDFLAGS = $(LDFLAGS_ALL_COMMON)
|
||||||
hawk_LDADD = $(LIBADD_BIN_COMMON) -lhawk
|
hawk_LDADD = $(LIBADD_BIN_COMMON) $(SOCKET_LIBS) -lhawk
|
||||||
hawk_DEPENDENCIES = ../lib/libhawk.la
|
hawk_DEPENDENCIES = ../lib/libhawk.la
|
||||||
|
|
||||||
|
@ -353,7 +353,7 @@ LIBADD_BIN_COMMON = $(LIBM)
|
|||||||
hawk_SOURCES = main.c
|
hawk_SOURCES = main.c
|
||||||
hawk_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
|
hawk_CPPFLAGS = $(CPPFLAGS_ALL_COMMON)
|
||||||
hawk_LDFLAGS = $(LDFLAGS_ALL_COMMON)
|
hawk_LDFLAGS = $(LDFLAGS_ALL_COMMON)
|
||||||
hawk_LDADD = $(LIBADD_BIN_COMMON) -lhawk
|
hawk_LDADD = $(LIBADD_BIN_COMMON) $(SOCKET_LIBS) -lhawk
|
||||||
hawk_DEPENDENCIES = ../lib/libhawk.la
|
hawk_DEPENDENCIES = ../lib/libhawk.la
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
|
109
hawk/bin/main.c
109
hawk/bin/main.c
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include <hawk-std.h>
|
#include <hawk-std.h>
|
||||||
#include <hawk-utl.h>
|
#include <hawk-utl.h>
|
||||||
|
#include <hawk-fmt.h>
|
||||||
#include <hawk-cli.h>
|
#include <hawk-cli.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -134,48 +135,55 @@ static void dprint (const hawk_ooch_t* fmt, ...)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(HAVE_SIGACTION)
|
|
||||||
|
|
||||||
typedef struct sig_state_t sig_state_t;
|
typedef struct sig_state_t sig_state_t;
|
||||||
struct sig_state_t
|
struct sig_state_t
|
||||||
{
|
{
|
||||||
hawk_oow_t handler;
|
hawk_uintptr_t handler;
|
||||||
hawk_oow_t old_handler;
|
hawk_uintptr_t old_handler;
|
||||||
|
#if defined(HAVE_SIGACTION)
|
||||||
sigset_t old_sa_mask;
|
sigset_t old_sa_mask;
|
||||||
int old_sa_flags;
|
int old_sa_flags;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*sig_handler_t) (int sig);
|
typedef void (*sig_handler_t) (int sig);
|
||||||
|
|
||||||
static sig_state_t g_sig_state[HAWK_NSIG];
|
static sig_state_t g_sig_state[HAWK_NSIG];
|
||||||
|
|
||||||
|
static int is_signal_handler_set (int sig)
|
||||||
|
{
|
||||||
|
return !!g_sig_state[sig].handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_SIGACTION)
|
||||||
static void dispatch_siginfo (int sig, siginfo_t* si, void* ctx)
|
static void dispatch_siginfo (int sig, siginfo_t* si, void* ctx)
|
||||||
{
|
{
|
||||||
if (g_sig_state[sig].handler != (hawk_oow_t)SIG_IGN &&
|
if (g_sig_state[sig].handler != (hawk_uintptr_t)SIG_IGN &&
|
||||||
g_sig_state[sig].handler != (hawk_oow_t)SIG_DFL)
|
g_sig_state[sig].handler != (hawk_uintptr_t)SIG_DFL)
|
||||||
{
|
{
|
||||||
((sig_handler_t)g_sig_state[sig].handler) (sig);
|
((sig_handler_t)g_sig_state[sig].handler) (sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_sig_state[sig].old_handler &&
|
if (g_sig_state[sig].old_handler &&
|
||||||
g_sig_state[sig].old_handler != (hawk_oow_t)SIG_IGN &&
|
g_sig_state[sig].old_handler != (hawk_uintptr_t)SIG_IGN &&
|
||||||
g_sig_state[sig].old_handler != (hawk_oow_t)SIG_DFL)
|
g_sig_state[sig].old_handler != (hawk_uintptr_t)SIG_DFL)
|
||||||
{
|
{
|
||||||
((void(*)(int, siginfo_t*, void*))g_sig_state[sig].old_handler) (sig, si, ctx);
|
((void(*)(int, siginfo_t*, void*))g_sig_state[sig].old_handler) (sig, si, ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void dispatch_signal (int sig)
|
static void dispatch_signal (int sig)
|
||||||
{
|
{
|
||||||
if (g_sig_state[sig].handler != (hawk_oow_t)SIG_IGN &&
|
if (g_sig_state[sig].handler != (hawk_uintptr_t)SIG_IGN &&
|
||||||
g_sig_state[sig].handler != (hawk_oow_t)SIG_DFL)
|
g_sig_state[sig].handler != (hawk_uintptr_t)SIG_DFL)
|
||||||
{
|
{
|
||||||
((sig_handler_t)g_sig_state[sig].handler) (sig);
|
((sig_handler_t)g_sig_state[sig].handler) (sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_sig_state[sig].old_handler &&
|
if (g_sig_state[sig].old_handler &&
|
||||||
g_sig_state[sig].old_handler != (hawk_oow_t)SIG_IGN &&
|
g_sig_state[sig].old_handler != (hawk_uintptr_t)SIG_IGN &&
|
||||||
g_sig_state[sig].old_handler != (hawk_oow_t)SIG_DFL)
|
g_sig_state[sig].old_handler != (hawk_uintptr_t)SIG_DFL)
|
||||||
{
|
{
|
||||||
((sig_handler_t)g_sig_state[sig].old_handler) (sig);
|
((sig_handler_t)g_sig_state[sig].old_handler) (sig);
|
||||||
}
|
}
|
||||||
@ -186,11 +194,12 @@ static int set_signal_handler (int sig, sig_handler_t handler, int extra_flags)
|
|||||||
if (g_sig_state[sig].handler)
|
if (g_sig_state[sig].handler)
|
||||||
{
|
{
|
||||||
/* already set - allow handler change. ignore extra_flags. */
|
/* already set - allow handler change. ignore extra_flags. */
|
||||||
if (g_sig_state[sig].handler == (hawk_oow_t)handler) return -1;
|
if (g_sig_state[sig].handler == (hawk_uintptr_t)handler) return -1;
|
||||||
g_sig_state[sig].handler = (hawk_oow_t)handler;
|
g_sig_state[sig].handler = (hawk_uintptr_t)handler;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_SIGACTION)
|
||||||
struct sigaction sa, oldsa;
|
struct sigaction sa, oldsa;
|
||||||
|
|
||||||
if (sigaction(sig, HAWK_NULL, &oldsa) == -1) return -1;
|
if (sigaction(sig, HAWK_NULL, &oldsa) == -1) return -1;
|
||||||
@ -213,14 +222,18 @@ static int set_signal_handler (int sig, sig_handler_t handler, int extra_flags)
|
|||||||
|
|
||||||
if (sigaction(sig, &sa, HAWK_NULL) == -1) return -1;
|
if (sigaction(sig, &sa, HAWK_NULL) == -1) return -1;
|
||||||
|
|
||||||
g_sig_state[sig].handler = (hawk_oow_t)handler;
|
g_sig_state[sig].handler = (hawk_uintptr_t)handler;
|
||||||
if (oldsa.sa_flags & SA_SIGINFO)
|
if (oldsa.sa_flags & SA_SIGINFO)
|
||||||
g_sig_state[sig].old_handler = (hawk_oow_t)oldsa.sa_sigaction;
|
g_sig_state[sig].old_handler = (hawk_uintptr_t)oldsa.sa_sigaction;
|
||||||
else
|
else
|
||||||
g_sig_state[sig].old_handler = (hawk_oow_t)oldsa.sa_handler;
|
g_sig_state[sig].old_handler = (hawk_uintptr_t)oldsa.sa_handler;
|
||||||
|
|
||||||
g_sig_state[sig].old_sa_mask = oldsa.sa_mask;
|
g_sig_state[sig].old_sa_mask = oldsa.sa_mask;
|
||||||
g_sig_state[sig].old_sa_flags = oldsa.sa_flags;
|
g_sig_state[sig].old_sa_flags = oldsa.sa_flags;
|
||||||
|
#else
|
||||||
|
g_sig_state[sig].old_handler = (hawk_uintptr_t)signal(sig, handler);
|
||||||
|
g_sig_state[sig].handler = (hawk_uintptr_t)dispatch_signal;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -228,10 +241,13 @@ static int set_signal_handler (int sig, sig_handler_t handler, int extra_flags)
|
|||||||
|
|
||||||
static int unset_signal_handler (int sig)
|
static int unset_signal_handler (int sig)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_SIGACTION)
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!g_sig_state[sig].handler) return -1; /* not set */
|
if (!g_sig_state[sig].handler) return -1; /* not set */
|
||||||
|
|
||||||
|
#if defined(HAVE_SIGACTION)
|
||||||
HAWK_MEMSET (&sa, 0, HAWK_SIZEOF(sa));
|
HAWK_MEMSET (&sa, 0, HAWK_SIZEOF(sa));
|
||||||
sa.sa_mask = g_sig_state[sig].old_sa_mask;
|
sa.sa_mask = g_sig_state[sig].old_sa_mask;
|
||||||
sa.sa_flags = g_sig_state[sig].old_sa_flags;
|
sa.sa_flags = g_sig_state[sig].old_sa_flags;
|
||||||
@ -246,6 +262,9 @@ static int unset_signal_handler (int sig)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sigaction(sig, &sa, HAWK_NULL) == -1) return -1;
|
if (sigaction(sig, &sa, HAWK_NULL) == -1) return -1;
|
||||||
|
#else
|
||||||
|
signal (sig, (sig_handler_t)g_sig_state[sig].old_handler);
|
||||||
|
#endif
|
||||||
|
|
||||||
g_sig_state[sig].handler = 0;
|
g_sig_state[sig].handler = 0;
|
||||||
/* keep other fields untouched */
|
/* keep other fields untouched */
|
||||||
@ -253,14 +272,6 @@ static int unset_signal_handler (int sig)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int is_signal_handler_set (int sig)
|
|
||||||
{
|
|
||||||
return !!g_sig_state[sig].handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void stop_run (int signo)
|
static void stop_run (int signo)
|
||||||
@ -282,9 +293,15 @@ static void do_nothing (int unused)
|
|||||||
|
|
||||||
static void set_intr_run (void)
|
static void set_intr_run (void)
|
||||||
{
|
{
|
||||||
|
#if defined(SIGTERM)
|
||||||
set_signal_handler (SIGTERM, stop_run, 0);
|
set_signal_handler (SIGTERM, stop_run, 0);
|
||||||
|
#endif
|
||||||
|
#if defined(SIGHUP)
|
||||||
set_signal_handler (SIGHUP, stop_run, 0);
|
set_signal_handler (SIGHUP, stop_run, 0);
|
||||||
|
#endif
|
||||||
|
#if defined(SIGINT)
|
||||||
set_signal_handler (SIGINT, stop_run, 0);
|
set_signal_handler (SIGINT, stop_run, 0);
|
||||||
|
#endif
|
||||||
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__) && defined(SIGPIPE)
|
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__) && defined(SIGPIPE)
|
||||||
set_signal_handler (SIGPIPE, do_nothing, 0);
|
set_signal_handler (SIGPIPE, do_nothing, 0);
|
||||||
#endif
|
#endif
|
||||||
@ -292,9 +309,15 @@ static void set_intr_run (void)
|
|||||||
|
|
||||||
static void unset_intr_run (void)
|
static void unset_intr_run (void)
|
||||||
{
|
{
|
||||||
|
#if defined(SIGTERM)
|
||||||
unset_signal_handler (SIGTERM);
|
unset_signal_handler (SIGTERM);
|
||||||
|
#endif
|
||||||
|
#if defined(SIGHUP)
|
||||||
unset_signal_handler (SIGHUP);
|
unset_signal_handler (SIGHUP);
|
||||||
|
#endif
|
||||||
|
#if defined(SIGINT)
|
||||||
unset_signal_handler (SIGINT);
|
unset_signal_handler (SIGINT);
|
||||||
|
#endif
|
||||||
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__) && defined(SIGPIPE)
|
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__) && defined(SIGPIPE)
|
||||||
unset_signal_handler (SIGPIPE);
|
unset_signal_handler (SIGPIPE);
|
||||||
#endif
|
#endif
|
||||||
@ -915,39 +938,36 @@ static void freearg (struct arg_t* arg)
|
|||||||
if (arg->gvm.ptr) free (arg->gvm.ptr);
|
if (arg->gvm.ptr) free (arg->gvm.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_hawk_error (hawk_t* awk)
|
static void print_hawk_error (hawk_t* hawk)
|
||||||
{
|
{
|
||||||
const hawk_loc_t* loc = hawk_geterrloc(awk);
|
const hawk_loc_t* loc = hawk_geterrloc(hawk);
|
||||||
|
|
||||||
hawk_logfmt (awk, HAWK_LOG_STDERR,
|
hawk_logfmt (hawk, HAWK_LOG_STDERR,
|
||||||
HAWK_T("ERROR: CODE %d LINE %zu COLUMN %zu %js%js%js- %js\n"),
|
HAWK_T("ERROR: CODE %d LINE %zu COLUMN %zu %js%js%js- %js\n"),
|
||||||
(int)hawk_geterrnum(awk),
|
(int)hawk_geterrnum(hawk),
|
||||||
(hawk_oow_t)loc->line,
|
(hawk_oow_t)loc->line,
|
||||||
(hawk_oow_t)loc->colm,
|
(hawk_oow_t)loc->colm,
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T("FILE ")),
|
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T("FILE ")),
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): loc->file),
|
((loc->file == HAWK_NULL)? HAWK_T(""): loc->file),
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T(" ")),
|
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T(" ")),
|
||||||
hawk_geterrmsg(awk)
|
hawk_geterrmsg(hawk)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_hawk_rtx_error (hawk_rtx_t* rtx)
|
static void print_hawk_rtx_error (hawk_rtx_t* rtx)
|
||||||
{
|
{
|
||||||
const hawk_loc_t* loc = hawk_rtx_geterrloc (rtx);
|
const hawk_loc_t* loc = hawk_rtx_geterrloc(rtx);
|
||||||
|
|
||||||
/* TODO: proper logging mask */
|
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR,
|
||||||
printf ("print_hawk_rtx_error... TODO: \n");
|
HAWK_T("ERROR: CODE %d LINE %zu COLUMN %zu %js%js%js- %js\n"),
|
||||||
/*
|
(int)hawk_rtx_geterrnum(rtx),
|
||||||
hawk_logfmt (hawk_rtx_gethawk(rtx), 0,
|
|
||||||
HAWK_T("ERROR: CODE %d LINE %zu COLUMN %zu %s%s%s- %s\n"),
|
|
||||||
hawk_rtx_geterrnum(rtx),
|
|
||||||
(hawk_oow_t)loc->line,
|
(hawk_oow_t)loc->line,
|
||||||
(hawk_oow_t)loc->colm,
|
(hawk_oow_t)loc->colm,
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T("FILE ")),
|
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T("FILE ")),
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): loc->file),
|
((loc->file == HAWK_NULL)? HAWK_T(""): loc->file),
|
||||||
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T(" ")),
|
((loc->file == HAWK_NULL)? HAWK_T(""): HAWK_T(" ")),
|
||||||
hawk_rtx_geterrmsg(rtx)
|
hawk_rtx_geterrmsg(rtx)
|
||||||
);*/
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_htb_walk_t add_global (hawk_htb_t* map, hawk_htb_pair_t* pair, void* arg)
|
hawk_htb_walk_t add_global (hawk_htb_t* map, hawk_htb_pair_t* pair, void* arg)
|
||||||
@ -1092,7 +1112,7 @@ static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[])
|
|||||||
xma_mmgr.ctx = hawk_xma_open(HAWK_MMGR_GETDFL(), 0, arg.memlimit);
|
xma_mmgr.ctx = hawk_xma_open(HAWK_MMGR_GETDFL(), 0, arg.memlimit);
|
||||||
if (xma_mmgr.ctx == HAWK_NULL)
|
if (xma_mmgr.ctx == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_printf (HAWK_T("ERROR: cannot open memory heap\n"));
|
print_error ("cannot open memory heap\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
mmgr = &xma_mmgr;
|
mmgr = &xma_mmgr;
|
||||||
@ -1195,6 +1215,7 @@ oops:
|
|||||||
freearg (&arg);
|
freearg (&arg);
|
||||||
|
|
||||||
#if defined(HAWK_BUILD_DEBUG)
|
#if defined(HAWK_BUILD_DEBUG)
|
||||||
|
/*
|
||||||
if (arg.failmalloc > 0)
|
if (arg.failmalloc > 0)
|
||||||
{
|
{
|
||||||
hawk_fprintf (HAWK_STDERR, HAWK_T("\n"));
|
hawk_fprintf (HAWK_STDERR, HAWK_T("\n"));
|
||||||
@ -1204,7 +1225,7 @@ oops:
|
|||||||
(unsigned long)debug_mmgr_free_count,
|
(unsigned long)debug_mmgr_free_count,
|
||||||
(unsigned long)debug_mmgr_realloc_count);
|
(unsigned long)debug_mmgr_realloc_count);
|
||||||
hawk_fprintf (HAWK_STDERR, HAWK_T("-------------------------------------------------------\n"));
|
hawk_fprintf (HAWK_STDERR, HAWK_T("-------------------------------------------------------\n"));
|
||||||
}
|
}*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -1232,12 +1253,12 @@ int main (int argc, hawk_bch_t* argv[])
|
|||||||
if (codepage == CP_UTF8)
|
if (codepage == CP_UTF8)
|
||||||
{
|
{
|
||||||
/*SetConsoleOUtputCP (CP_UTF8);*/
|
/*SetConsoleOUtputCP (CP_UTF8);*/
|
||||||
hawk_setdflcmgrbyid (HAWK_CMGR_UTF8);
|
/*hawk_setdflcmgrbyid (HAWK_CMGR_UTF8);*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* .codepage */
|
/* .codepage */
|
||||||
hawk_fmt_uintmax_to_bcstr (locale, HAWK_COUNTOF(locale), codepage, 10, -1, HAWK_MT('\0'), HAWK_MT("."));
|
hawk_fmt_uintmax_to_bcstr (locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
|
||||||
setlocale (LC_ALL, locale);
|
setlocale (LC_ALL, locale);
|
||||||
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
||||||
}
|
}
|
||||||
@ -1250,7 +1271,7 @@ int main (int argc, hawk_bch_t* argv[])
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
if (WSAStartup (MAKEWORD(2,0), &wsadata) != 0)
|
if (WSAStartup (MAKEWORD(2,0), &wsadata) != 0)
|
||||||
{
|
{
|
||||||
print_error (HAWK_T("Failed to start up winsock\n"));
|
print_error ("Failed to start up winsock\n");
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
@ -1258,7 +1279,7 @@ int main (int argc, hawk_bch_t* argv[])
|
|||||||
/* TODO: add an option to skip watt-32 */
|
/* TODO: add an option to skip watt-32 */
|
||||||
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
||||||
if (sock_init() != 0)
|
if (sock_init() != 0)
|
||||||
print_warning (HAWK_T("Failed to initialize watt-32\n"));
|
print_warning ("Failed to initialize watt-32\n");
|
||||||
else sock_inited = 1;
|
else sock_inited = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
2
hawk/configure
vendored
2
hawk/configure
vendored
@ -18734,7 +18734,7 @@ _ACEOF
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for ac_func in snprintf _vsnprintf _vsnwprintf strerror_r
|
for ac_func in snprintf _vsnprintf _vsnwprintf strerror_r random_r random
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
@ -202,7 +202,7 @@ AC_CHECK_FUNCS([makecontext swapcontext getcontext setcontext])
|
|||||||
AC_CHECK_FUNCS([clock_nanosleep nanosleep usleep])
|
AC_CHECK_FUNCS([clock_nanosleep nanosleep usleep])
|
||||||
AC_CHECK_FUNCS([localtime_r gmtime_r])
|
AC_CHECK_FUNCS([localtime_r gmtime_r])
|
||||||
AC_CHECK_FUNCS([sigaction signal])
|
AC_CHECK_FUNCS([sigaction signal])
|
||||||
AC_CHECK_FUNCS([snprintf _vsnprintf _vsnwprintf strerror_r])
|
AC_CHECK_FUNCS([snprintf _vsnprintf _vsnwprintf strerror_r random_r random])
|
||||||
AC_CHECK_FUNCS([accept4 pipe2 epoll_create epoll_create1 kqueue kqueue1])
|
AC_CHECK_FUNCS([accept4 pipe2 epoll_create epoll_create1 kqueue kqueue1])
|
||||||
AC_CHECK_FUNCS([isatty mmap munmap])
|
AC_CHECK_FUNCS([isatty mmap munmap])
|
||||||
AC_CHECK_FUNCS([readdir64 dirfd faccessat])
|
AC_CHECK_FUNCS([readdir64 dirfd faccessat])
|
||||||
|
@ -1278,22 +1278,21 @@ static int get_devname_from_handle (
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_volname_from_handle (
|
static int get_volname_from_handle (hawk_fio_t* fio, hawk_ooch_t* buf, hawk_oow_t len)
|
||||||
hawk_fio_t* fio, hawk_ooch_t* buf, hawk_oow_t len)
|
|
||||||
{
|
{
|
||||||
if (get_devname_from_handle (fio, buf, len) == -1) return -1;
|
if (get_devname_from_handle (fio, buf, len) == -1) return -1;
|
||||||
|
|
||||||
if (hawk_strcasebeg (buf, HAWK_T("\\Device\\LanmanRedirector\\")))
|
if (hawk_comp_oocstr_limited(buf, HAWK_T("\\Device\\LanmanRedirector\\"), 25, 1) == 0)
|
||||||
{
|
{
|
||||||
/*buf[0] = HAWK_T('\\');*/
|
/*buf[0] = HAWK_T('\\');*/
|
||||||
hawk_strcpy (&buf[1], &buf[24]);
|
hawk_copy_oocstr_unlimited (&buf[1], &buf[24]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DWORD n;
|
DWORD n;
|
||||||
hawk_ooch_t drives[128];
|
hawk_ooch_t drives[128];
|
||||||
|
|
||||||
n = GetLogicalDriveStrings (HAWK_COUNTOF(drives), drives);
|
n = GetLogicalDriveStrings(HAWK_COUNTOF(drives), drives);
|
||||||
|
|
||||||
if (n == 0 /* error */ ||
|
if (n == 0 /* error */ ||
|
||||||
n > HAWK_COUNTOF(drives) /* buffer small */)
|
n > HAWK_COUNTOF(drives) /* buffer small */)
|
||||||
@ -1312,14 +1311,14 @@ static int get_volname_from_handle (
|
|||||||
drv[2] = HAWK_T('\0');
|
drv[2] = HAWK_T('\0');
|
||||||
if (QueryDosDevice (drv, path, HAWK_COUNTOF(path)))
|
if (QueryDosDevice (drv, path, HAWK_COUNTOF(path)))
|
||||||
{
|
{
|
||||||
hawk_oow_t pl = hawk_strlen(path);
|
hawk_oow_t pl = hawk_count_oocstr(path);
|
||||||
hawk_oow_t bl = hawk_strlen(buf);
|
hawk_oow_t bl = hawk_count_oocstr(buf);
|
||||||
if (bl > pl && buf[pl] == HAWK_T('\\') &&
|
if (bl > pl && buf[pl] == HAWK_T('\\') &&
|
||||||
hawk_strxncasecmp(buf, pl, path, pl) == 0)
|
hawk_comp_oochars(buf, pl, path, pl, 1) == 0)
|
||||||
{
|
{
|
||||||
buf[0] = drv[0];
|
buf[0] = drv[0];
|
||||||
buf[1] = HAWK_T(':');
|
buf[1] = HAWK_T(':');
|
||||||
hawk_strcpy (&buf[2], &buf[pl]);
|
hawk_copy_oocstr_unlimited (&buf[2], &buf[pl]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -384,15 +384,40 @@ hawk_bch_t* hawk_gem_duputobcharswithcmgr (hawk_gem_t* gem, const hawk_uch_t* uc
|
|||||||
return bcs;
|
return bcs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hawk_uch_t* hawk_gem_dupbcstrarrtoucstr (hawk_gem_t* gem, const hawk_bch_t* bcs[], hawk_oow_t* ucslen, int all)
|
||||||
|
{
|
||||||
|
hawk_oow_t bl, ul, capa, pos, i;
|
||||||
|
hawk_uch_t* ucs;
|
||||||
|
|
||||||
|
for (capa = 0, i = 0; bcs[i]; i++)
|
||||||
|
{
|
||||||
|
if (hawk_gem_convbtoucstr(gem, bcs[i], &bl, HAWK_NULL, &ul, all) <= -1) return HAWK_NULL;
|
||||||
|
capa += ul;
|
||||||
|
}
|
||||||
|
|
||||||
|
ucs = (hawk_uch_t*)hawk_gem_allocmem(gem, (capa + 1) * HAWK_SIZEOF(*ucs));
|
||||||
|
if (!ucs) return HAWK_NULL;
|
||||||
|
|
||||||
|
for (pos = 0, i = 0; bcs[i]; i++)
|
||||||
|
{
|
||||||
|
ul = capa - pos + 1;
|
||||||
|
hawk_gem_convbtoucstr (gem, bcs[i], &bl, &ucs[pos], &ul, all);
|
||||||
|
pos += ul;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ucslen) *ucslen = capa;
|
||||||
|
return ucs;
|
||||||
|
}
|
||||||
|
|
||||||
hawk_bch_t* hawk_gem_dupucstrarrtobcstr (hawk_gem_t* gem, const hawk_uch_t* ucs[], hawk_oow_t* bcslen)
|
hawk_bch_t* hawk_gem_dupucstrarrtobcstr (hawk_gem_t* gem, const hawk_uch_t* ucs[], hawk_oow_t* bcslen)
|
||||||
{
|
{
|
||||||
hawk_oow_t wl, ml, capa, pos, i;
|
hawk_oow_t ul, bl, capa, pos, i;
|
||||||
hawk_bch_t* bcs;
|
hawk_bch_t* bcs;
|
||||||
|
|
||||||
for (capa = 0, i = 0; ucs[i]; i++)
|
for (capa = 0, i = 0; ucs[i]; i++)
|
||||||
{
|
{
|
||||||
if (hawk_gem_convutobcstr(gem, ucs[i], &wl, HAWK_NULL, &ml) <= -1) return HAWK_NULL;
|
if (hawk_gem_convutobcstr(gem, ucs[i], &ul, HAWK_NULL, &bl) <= -1) return HAWK_NULL;
|
||||||
capa += ml;
|
capa += bl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bcs = (hawk_bch_t*)hawk_gem_allocmem(gem, (capa + 1) * HAWK_SIZEOF(*bcs));
|
bcs = (hawk_bch_t*)hawk_gem_allocmem(gem, (capa + 1) * HAWK_SIZEOF(*bcs));
|
||||||
@ -400,9 +425,9 @@ hawk_bch_t* hawk_gem_dupucstrarrtobcstr (hawk_gem_t* gem, const hawk_uch_t* ucs[
|
|||||||
|
|
||||||
for (pos = 0, i = 0; ucs[i]; i++)
|
for (pos = 0, i = 0; ucs[i]; i++)
|
||||||
{
|
{
|
||||||
ml = capa - pos + 1;
|
bl = capa - pos + 1;
|
||||||
hawk_gem_convutobcstr (gem, ucs[i], &wl, &bcs[pos], &ml);
|
hawk_gem_convutobcstr (gem, ucs[i], &ul, &bcs[pos], &bl);
|
||||||
pos += ml;
|
pos += bl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bcslen) *bcslen = capa;
|
if (bcslen) *bcslen = capa;
|
||||||
|
@ -343,6 +343,12 @@
|
|||||||
/* Define to 1 if you have the `quadmath_snprintf' function. */
|
/* Define to 1 if you have the `quadmath_snprintf' function. */
|
||||||
#undef HAVE_QUADMATH_SNPRINTF
|
#undef HAVE_QUADMATH_SNPRINTF
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `random' function. */
|
||||||
|
#undef HAVE_RANDOM
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `random_r' function. */
|
||||||
|
#undef HAVE_RANDOM_R
|
||||||
|
|
||||||
/* Define to 1 if you have the `readdir64' function. */
|
/* Define to 1 if you have the `readdir64' function. */
|
||||||
#undef HAVE_READDIR64
|
#undef HAVE_READDIR64
|
||||||
|
|
||||||
|
@ -1258,9 +1258,6 @@ typedef enum hawk_log_mask_t hawk_log_mask_t;
|
|||||||
*/
|
*/
|
||||||
#if (HAWK_SIZEOF_UCH_T == HAWK_SIZEOF_BCH_T)
|
#if (HAWK_SIZEOF_UCH_T == HAWK_SIZEOF_BCH_T)
|
||||||
# define HAWK_UT(txt) (txt)
|
# define HAWK_UT(txt) (txt)
|
||||||
#elif defined(HAWK_UCH_IS_CHAR16_T) && (HAWK_SIZEOF_WCHAR_T == 2)
|
|
||||||
/* prefer L to u as u is not supported by some compiers despite char16_t support */
|
|
||||||
# define HAWK_UT(txt) (L ## txt)
|
|
||||||
#elif defined(HAWK_UCH_IS_CHAR16_T)
|
#elif defined(HAWK_UCH_IS_CHAR16_T)
|
||||||
# define HAWK_UT(txt) (u ## txt)
|
# define HAWK_UT(txt) (u ## txt)
|
||||||
#else
|
#else
|
||||||
|
@ -218,12 +218,20 @@ HAWK_EXPORT hawk_bch_t* hawk_gem_duputobcharswithcmgr (
|
|||||||
hawk_cmgr_t* cmgr
|
hawk_cmgr_t* cmgr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT hawk_uch_t* hawk_gem_dupbcstrarrtoucstr (
|
||||||
|
hawk_gem_t* gem,
|
||||||
|
const hawk_bch_t* bcs[],
|
||||||
|
hawk_oow_t* ucslen,
|
||||||
|
int all
|
||||||
|
);
|
||||||
|
|
||||||
HAWK_EXPORT hawk_bch_t* hawk_gem_dupucstrarrtobcstr (
|
HAWK_EXPORT hawk_bch_t* hawk_gem_dupucstrarrtobcstr (
|
||||||
hawk_gem_t* gem,
|
hawk_gem_t* gem,
|
||||||
const hawk_uch_t* ucs[],
|
const hawk_uch_t* ucs[],
|
||||||
hawk_oow_t* bcslen
|
hawk_oow_t* bcslen
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
hawk_oow_t hawk_gem_vfmttoucstr (
|
hawk_oow_t hawk_gem_vfmttoucstr (
|
||||||
|
@ -547,9 +547,9 @@ HAWK_EXPORT hawk_htb_pair_t* hawk_htb_update (
|
|||||||
* for (i = 0; i < HAWK_COUNTOF(vals); i++)
|
* for (i = 0; i < HAWK_COUNTOF(vals); i++)
|
||||||
* {
|
* {
|
||||||
* hawk_cstr_t ctx;
|
* hawk_cstr_t ctx;
|
||||||
* ctx.ptr = vals[i]; ctx.len = hawk_strlen(vals[i]);
|
* ctx.ptr = vals[i]; ctx.len = hawk_count_oocstr(vals[i]);
|
||||||
* hawk_htb_cbsert (s1,
|
* hawk_htb_cbsert (s1,
|
||||||
* keys[i%HAWK_COUNTOF(keys)], hawk_strlen(keys[i%HAWK_COUNTOF(keys)]),
|
* keys[i%HAWK_COUNTOF(keys)], hawk_count_oocstr(keys[i%HAWK_COUNTOF(keys)]),
|
||||||
* cbserter, &ctx
|
* cbserter, &ctx
|
||||||
* ); // note error check is skipped
|
* ); // note error check is skipped
|
||||||
* }
|
* }
|
||||||
|
@ -52,7 +52,7 @@ enum hawk_pio_flag_t
|
|||||||
|
|
||||||
/** indicate that the command to hawk_pio_open() is a multi-byte string.
|
/** indicate that the command to hawk_pio_open() is a multi-byte string.
|
||||||
* it is useful if #HAWK_OOCH_IS_UCH is defined. */
|
* it is useful if #HAWK_OOCH_IS_UCH is defined. */
|
||||||
HAWK_PIO_MBSCMD = (1 << 4),
|
HAWK_PIO_BCSTRCMD = (1 << 4),
|
||||||
|
|
||||||
/** don't attempt to close open file descriptors unknown to pio.
|
/** don't attempt to close open file descriptors unknown to pio.
|
||||||
* it is useful only on a unix-like systems where file descriptors
|
* it is useful only on a unix-like systems where file descriptors
|
||||||
@ -202,7 +202,7 @@ extern "C" {
|
|||||||
* On *nix systems, a full path to the command is needed if it is not specified.
|
* On *nix systems, a full path to the command is needed if it is not specified.
|
||||||
* If \a env is #HAWK_NULL, the environment of \a cmd inherits that of the
|
* If \a env is #HAWK_NULL, the environment of \a cmd inherits that of the
|
||||||
* calling process. If you want to pass an empty environment, you can pass
|
* calling process. If you want to pass an empty environment, you can pass
|
||||||
* an empty \a env object with no items inserted. If #HAWK_PIO_MBSCMD is
|
* an empty \a env object with no items inserted. If #HAWK_PIO_BCSTRCMD is
|
||||||
* specified in \a flags, \a cmd is treated as a multi-byte string whose
|
* specified in \a flags, \a cmd is treated as a multi-byte string whose
|
||||||
* character type is #hawk_bch_t.
|
* character type is #hawk_bch_t.
|
||||||
* \return #hawk_pio_t object on success, #HAWK_NULL on failure
|
* \return #hawk_pio_t object on success, #HAWK_NULL on failure
|
||||||
|
@ -500,9 +500,9 @@ HAWK_EXPORT hawk_rbt_pair_t* hawk_rbt_update (
|
|||||||
* for (i = 0; i < HAWK_COUNTOF(vals); i++)
|
* for (i = 0; i < HAWK_COUNTOF(vals); i++)
|
||||||
* {
|
* {
|
||||||
* hawk_cstr_t ctx;
|
* hawk_cstr_t ctx;
|
||||||
* ctx.ptr = vals[i]; ctx.len = hawk_strlen(vals[i]);
|
* ctx.ptr = vals[i]; ctx.len = hawk_count_oocstr(vals[i]);
|
||||||
* hawk_rbt_cbsert (s1,
|
* hawk_rbt_cbsert (s1,
|
||||||
* keys[i%HAWK_COUNTOF(keys)], hawk_strlen(keys[i%HAWK_COUNTOF(keys)]),
|
* keys[i%HAWK_COUNTOF(keys)], hawk_count_oocstr(keys[i%HAWK_COUNTOF(keys)]),
|
||||||
* cbserter, &ctx
|
* cbserter, &ctx
|
||||||
* ); // note error check is skipped
|
* ); // note error check is skipped
|
||||||
* }
|
* }
|
||||||
|
@ -156,7 +156,7 @@ HAWK_EXPORT hawk_t* hawk_openstdwithmmgr (
|
|||||||
*
|
*
|
||||||
* in[0].type = HAWK_PARSESTD_OOCS;
|
* in[0].type = HAWK_PARSESTD_OOCS;
|
||||||
* in[0].u.str.ptr = HAWK_T("BEGIN { print 10; }");
|
* in[0].u.str.ptr = HAWK_T("BEGIN { print 10; }");
|
||||||
* in[0].u.str.len = hawk_strlen(in.u.str.ptr);
|
* in[0].u.str.len = hawk_count_oocstr(in.u.str.ptr);
|
||||||
* in[1].type = HAWK_PARSESTD_NULL;
|
* in[1].type = HAWK_PARSESTD_NULL;
|
||||||
* out.type = HAWK_PARSESTD_OOCS;
|
* out.type = HAWK_PARSESTD_OOCS;
|
||||||
* n = hawk_parsestd (awk, in, &out);
|
* n = hawk_parsestd (awk, in, &out);
|
||||||
|
@ -463,13 +463,15 @@ HAWK_EXPORT int hawk_comp_bcstr (
|
|||||||
HAWK_EXPORT int hawk_comp_ucstr_limited (
|
HAWK_EXPORT int hawk_comp_ucstr_limited (
|
||||||
const hawk_uch_t* str1,
|
const hawk_uch_t* str1,
|
||||||
const hawk_uch_t* str2,
|
const hawk_uch_t* str2,
|
||||||
hawk_oow_t maxlen
|
hawk_oow_t maxlen,
|
||||||
|
int ignorecase
|
||||||
);
|
);
|
||||||
|
|
||||||
HAWK_EXPORT int hawk_comp_bcstr_limited (
|
HAWK_EXPORT int hawk_comp_bcstr_limited (
|
||||||
const hawk_bch_t* str1,
|
const hawk_bch_t* str1,
|
||||||
const hawk_bch_t* str2,
|
const hawk_bch_t* str2,
|
||||||
hawk_oow_t maxlen
|
hawk_oow_t maxlen,
|
||||||
|
int ignorecase
|
||||||
);
|
);
|
||||||
|
|
||||||
HAWK_EXPORT int hawk_comp_ucstr_bcstr (
|
HAWK_EXPORT int hawk_comp_ucstr_bcstr (
|
||||||
@ -729,12 +731,13 @@ HAWK_EXPORT int hawk_split_bcstr (
|
|||||||
# define hawk_comp_oochars_ucstr hawk_comp_uchars_ucstr
|
# define hawk_comp_oochars_ucstr hawk_comp_uchars_ucstr
|
||||||
# define hawk_comp_oochars_oocstr hawk_comp_uchars_ucstr
|
# define hawk_comp_oochars_oocstr hawk_comp_uchars_ucstr
|
||||||
# define hawk_comp_oocstr hawk_comp_ucstr
|
# define hawk_comp_oocstr hawk_comp_ucstr
|
||||||
|
# define hawk_comp_oocstr_limited hawk_comp_ucstr_limited
|
||||||
|
|
||||||
# define hawk_copy_oochars(dst,src,len) hawk_copy_uchars(dst,src,len)
|
# define hawk_copy_oochars hawk_copy_uchars
|
||||||
# define hawk_copy_bchars_to_oochars(dst,src,len) hawk_copy_bchars_to_uchars(dst,src,len)
|
# define hawk_copy_bchars_to_oochars hawk_copy_bchars_to_uchars
|
||||||
# define hawk_copy_oochars_to_bchars(dst,src,len) hawk_copy_uchars_to_bchars(dst,src,len)
|
# define hawk_copy_oochars_to_bchars hawk_copy_uchars_to_bchars
|
||||||
# define hawk_copy_uchars_to_oochars(dst,src,len) hawk_copy_uchars(dst,src,len)
|
# define hawk_copy_uchars_to_oochars hawk_copy_uchars
|
||||||
# define hawk_copy_oochars_to_uchars(dst,src,len) hawk_copy_uchars(dst,src,len)
|
# define hawk_copy_oochars_to_uchars hawk_copy_uchars
|
||||||
|
|
||||||
# define hawk_copy_oochars_to_oocstr(dst,dlen,src,slen) hawk_copy_uchars_to_ucstr(dst,dlen,src,slen)
|
# define hawk_copy_oochars_to_oocstr(dst,dlen,src,slen) hawk_copy_uchars_to_ucstr(dst,dlen,src,slen)
|
||||||
# define hawk_copy_oochars_to_oocstr_unlimited(dst,src,len) hawk_copy_uchars_to_ucstr_unlimited(dst,src,len)
|
# define hawk_copy_oochars_to_oocstr_unlimited(dst,src,len) hawk_copy_uchars_to_ucstr_unlimited(dst,src,len)
|
||||||
@ -765,12 +768,13 @@ HAWK_EXPORT int hawk_split_bcstr (
|
|||||||
# define hawk_comp_oochars_ucstr hawk_comp_bchars_ucstr
|
# define hawk_comp_oochars_ucstr hawk_comp_bchars_ucstr
|
||||||
# define hawk_comp_oochars_oocstr hawk_comp_bchars_bcstr
|
# define hawk_comp_oochars_oocstr hawk_comp_bchars_bcstr
|
||||||
# define hawk_comp_oocstr hawk_comp_bcstr
|
# define hawk_comp_oocstr hawk_comp_bcstr
|
||||||
|
# define hawk_comp_oocstr_limited hawk_comp_bcstr_limited
|
||||||
|
|
||||||
# define hawk_copy_oochars(dst,src,len) hawk_copy_bchars(dst,src,len)
|
# define hawk_copy_oochars hawk_copy_bchars
|
||||||
# define hawk_copy_bchars_to_oochars(dst,src,len) hawk_copy_bchars(dst,src,len)
|
# define hawk_copy_bchars_to_oochars hawk_copy_bchars
|
||||||
# define hawk_copy_oochars_to_bchars(dst,src,len) hawk_copy_bchars(dst,src,len)
|
# define hawk_copy_oochars_to_bchars hawk_copy_bchars
|
||||||
# define hawk_copy_uchars_to_oochars(dst,src,len) hawk_copy_uchars_to_bchars(dst,src,len)
|
# define hawk_copy_uchars_to_oochars hawk_copy_uchars_to_bchars
|
||||||
# define hawk_copy_oochars_to_uchars(dst,src,len) hawk_copy_bchars_to_uchars(dst,src,len)
|
# define hawk_copy_oochars_to_uchars hawk_copy_bchars_to_uchars
|
||||||
|
|
||||||
# define hawk_copy_oochars_to_oocstr(dst,dlen,src,slen) hawk_copy_bchars_to_bcstr(dst,dlen,src,slen)
|
# define hawk_copy_oochars_to_oocstr(dst,dlen,src,slen) hawk_copy_bchars_to_bcstr(dst,dlen,src,slen)
|
||||||
# define hawk_copy_oochars_to_oocstr_unlimited(dst,src,len) hawk_copy_bchars_to_bcstr_unlimited(dst,src,len)
|
# define hawk_copy_oochars_to_oocstr_unlimited(dst,src,len) hawk_copy_bchars_to_bcstr_unlimited(dst,src,len)
|
||||||
|
@ -1926,6 +1926,7 @@ static HAWK_INLINE hawk_uch_t* hawk_dupbtoucstr (hawk_t* hawk, const hawk_bch_t*
|
|||||||
static HAWK_INLINE hawk_bch_t* hawk_duputobcstr (hawk_t* hawk, const hawk_uch_t* ucs, hawk_oow_t* _bcslen) { return hawk_gem_duputobcstr(hawk_getgem(hawk), ucs, _bcslen); }
|
static HAWK_INLINE hawk_bch_t* hawk_duputobcstr (hawk_t* hawk, const hawk_uch_t* ucs, hawk_oow_t* _bcslen) { return hawk_gem_duputobcstr(hawk_getgem(hawk), ucs, _bcslen); }
|
||||||
static HAWK_INLINE hawk_uch_t* hawk_dupbtoucharswithcmgr (hawk_t* hawk, const hawk_bch_t* bcs, hawk_oow_t _bcslen, hawk_oow_t* _ucslen, hawk_cmgr_t* cmgr, int all) { return hawk_gem_dupbtoucharswithcmgr(hawk_getgem(hawk), bcs, _bcslen, _ucslen, cmgr, all); }
|
static HAWK_INLINE hawk_uch_t* hawk_dupbtoucharswithcmgr (hawk_t* hawk, const hawk_bch_t* bcs, hawk_oow_t _bcslen, hawk_oow_t* _ucslen, hawk_cmgr_t* cmgr, int all) { return hawk_gem_dupbtoucharswithcmgr(hawk_getgem(hawk), bcs, _bcslen, _ucslen, cmgr, all); }
|
||||||
static HAWK_INLINE hawk_bch_t* hawk_duputobcharswithcmgr (hawk_t* hawk, const hawk_uch_t* ucs, hawk_oow_t _ucslen, hawk_oow_t* _bcslen, hawk_cmgr_t* cmgr) { return hawk_gem_duputobcharswithcmgr(hawk_getgem(hawk), ucs, _ucslen, _bcslen, cmgr); }
|
static HAWK_INLINE hawk_bch_t* hawk_duputobcharswithcmgr (hawk_t* hawk, const hawk_uch_t* ucs, hawk_oow_t _ucslen, hawk_oow_t* _bcslen, hawk_cmgr_t* cmgr) { return hawk_gem_duputobcharswithcmgr(hawk_getgem(hawk), ucs, _ucslen, _bcslen, cmgr); }
|
||||||
|
static HAWK_INLINE hawk_uch_t* hawk_dupbcstrarrtoucstr (hawk_t* hawk, const hawk_bch_t* bcsarr[], hawk_oow_t* ucslen, int all) { return hawk_gem_dupbcstrarrtoucstr(hawk_getgem(hawk), bcsarr, ucslen, all); }
|
||||||
static HAWK_INLINE hawk_bch_t* hawk_dupucstrarrtobcstr (hawk_t* hawk, const hawk_uch_t* ucsarr[], hawk_oow_t* bcslen) { return hawk_gem_dupucstrarrtobcstr(hawk_getgem(hawk), ucsarr, bcslen); }
|
static HAWK_INLINE hawk_bch_t* hawk_dupucstrarrtobcstr (hawk_t* hawk, const hawk_uch_t* ucsarr[], hawk_oow_t* bcslen) { return hawk_gem_dupucstrarrtobcstr(hawk_getgem(hawk), ucsarr, bcslen); }
|
||||||
#else
|
#else
|
||||||
#define hawk_dupbtouchars(hawk, bcs, _bcslen, _ucslen, all) hawk_gem_dupbtouchars(hawk_getgem(hawk), bcs, _bcslen, _ucslen, all)
|
#define hawk_dupbtouchars(hawk, bcs, _bcslen, _ucslen, all) hawk_gem_dupbtouchars(hawk_getgem(hawk), bcs, _bcslen, _ucslen, all)
|
||||||
@ -1936,6 +1937,7 @@ static HAWK_INLINE hawk_bch_t* hawk_dupucstrarrtobcstr (hawk_t* hawk, const hawk
|
|||||||
#define hawk_duputobcstr(hawk, ucs, _bcslen) hawk_gem_duputobcstr(hawk_getgem(hawk), ucs, _bcslen)
|
#define hawk_duputobcstr(hawk, ucs, _bcslen) hawk_gem_duputobcstr(hawk_getgem(hawk), ucs, _bcslen)
|
||||||
#define hawk_dupbtoucharswithcmgr(hawk, bcs, _bcslen, _ucslen, cmgr, all) hawk_gem_dupbtoucharswithcmgr(hawk_getgem(hawk), bcs, _bcslen, _ucslen, cmgr, all)
|
#define hawk_dupbtoucharswithcmgr(hawk, bcs, _bcslen, _ucslen, cmgr, all) hawk_gem_dupbtoucharswithcmgr(hawk_getgem(hawk), bcs, _bcslen, _ucslen, cmgr, all)
|
||||||
#define hawk_duputobcharswithcmgr(hawk, ucs, _ucslen, _bcslen, cmgr) hawk_gem_duputobcharswithcmgr(hawk_getgem(hawk), ucs, _ucslen, _bcslen, cmgr)
|
#define hawk_duputobcharswithcmgr(hawk, ucs, _ucslen, _bcslen, cmgr) hawk_gem_duputobcharswithcmgr(hawk_getgem(hawk), ucs, _ucslen, _bcslen, cmgr)
|
||||||
|
#define hawk_dupbcstrarrtoucstr(hawk, bcsarr, ucslen, all) hawk_gem_dupbcstrarrtoucstr(hawk_getgem(hawk), bcsarr, ucslen, all)
|
||||||
#define hawk_dupucstrarrtobcstr(hawk, ucsarr, bcslen) hawk_gem_dupucstrarrtobcstr(hawk_getgem(hawk), ucsarr, bcslen)
|
#define hawk_dupucstrarrtobcstr(hawk, ucsarr, bcslen) hawk_gem_dupucstrarrtobcstr(hawk_getgem(hawk), ucsarr, bcslen)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3169,6 +3171,7 @@ static HAWK_INLINE hawk_uch_t* hawk_rtx_dupbtoucstr (hawk_rtx_t* rtx, const hawk
|
|||||||
static HAWK_INLINE hawk_bch_t* hawk_rtx_duputobcstr (hawk_rtx_t* rtx, const hawk_uch_t* ucs, hawk_oow_t* _bcslen) { return hawk_gem_duputobcstr(hawk_rtx_getgem(rtx), ucs, _bcslen); }
|
static HAWK_INLINE hawk_bch_t* hawk_rtx_duputobcstr (hawk_rtx_t* rtx, const hawk_uch_t* ucs, hawk_oow_t* _bcslen) { return hawk_gem_duputobcstr(hawk_rtx_getgem(rtx), ucs, _bcslen); }
|
||||||
static HAWK_INLINE hawk_uch_t* hawk_rtx_dupbtoucharswithcmgr (hawk_rtx_t* rtx, const hawk_bch_t* bcs, hawk_oow_t _bcslen, hawk_oow_t* _ucslen, hawk_cmgr_t* cmgr, int all) { return hawk_gem_dupbtoucharswithcmgr(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, cmgr, all); }
|
static HAWK_INLINE hawk_uch_t* hawk_rtx_dupbtoucharswithcmgr (hawk_rtx_t* rtx, const hawk_bch_t* bcs, hawk_oow_t _bcslen, hawk_oow_t* _ucslen, hawk_cmgr_t* cmgr, int all) { return hawk_gem_dupbtoucharswithcmgr(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, cmgr, all); }
|
||||||
static HAWK_INLINE hawk_bch_t* hawk_rtx_duputobcharswithcmgr (hawk_rtx_t* rtx, const hawk_uch_t* ucs, hawk_oow_t _ucslen, hawk_oow_t* _bcslen, hawk_cmgr_t* cmgr) { return hawk_gem_duputobcharswithcmgr(hawk_rtx_getgem(rtx), ucs, _ucslen, _bcslen, cmgr); }
|
static HAWK_INLINE hawk_bch_t* hawk_rtx_duputobcharswithcmgr (hawk_rtx_t* rtx, const hawk_uch_t* ucs, hawk_oow_t _ucslen, hawk_oow_t* _bcslen, hawk_cmgr_t* cmgr) { return hawk_gem_duputobcharswithcmgr(hawk_rtx_getgem(rtx), ucs, _ucslen, _bcslen, cmgr); }
|
||||||
|
static HAWK_INLINE hawk_uch_t* hawk_rtx_dupbcstrarrtoucstr (hawk_rtx_t* rtx, const hawk_bch_t* bcsarr[], hawk_oow_t* ucslen, int all) { return hawk_gem_dupbcstrarrtoucstr(hawk_rtx_getgem(rtx), bcsarr, ucslen, all); }
|
||||||
static HAWK_INLINE hawk_bch_t* hawk_rtx_dupucstrarrtobcstr (hawk_rtx_t* rtx, const hawk_uch_t* ucsarr[], hawk_oow_t* bcslen) { return hawk_gem_dupucstrarrtobcstr(hawk_rtx_getgem(rtx), ucsarr, bcslen); }
|
static HAWK_INLINE hawk_bch_t* hawk_rtx_dupucstrarrtobcstr (hawk_rtx_t* rtx, const hawk_uch_t* ucsarr[], hawk_oow_t* bcslen) { return hawk_gem_dupucstrarrtobcstr(hawk_rtx_getgem(rtx), ucsarr, bcslen); }
|
||||||
#else
|
#else
|
||||||
#define hawk_rtx_dupbtouchars(rtx, bcs, _bcslen, _ucslen, all) hawk_gem_dupbtouchars(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, all)
|
#define hawk_rtx_dupbtouchars(rtx, bcs, _bcslen, _ucslen, all) hawk_gem_dupbtouchars(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, all)
|
||||||
@ -3179,6 +3182,7 @@ static HAWK_INLINE hawk_bch_t* hawk_rtx_dupucstrarrtobcstr (hawk_rtx_t* rtx, con
|
|||||||
#define hawk_rtx_duputobcstr(rtx, ucs, _bcslen) hawk_gem_duputobcstr(hawk_rtx_getgem(rtx), ucs, _bcslen)
|
#define hawk_rtx_duputobcstr(rtx, ucs, _bcslen) hawk_gem_duputobcstr(hawk_rtx_getgem(rtx), ucs, _bcslen)
|
||||||
#define hawk_rtx_dupbtoucharswithcmgr(rtx, bcs, _bcslen, _ucslen, cmgr, all) hawk_gem_dupbtoucharswithcmgr(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, cmgr, all)
|
#define hawk_rtx_dupbtoucharswithcmgr(rtx, bcs, _bcslen, _ucslen, cmgr, all) hawk_gem_dupbtoucharswithcmgr(hawk_rtx_getgem(rtx), bcs, _bcslen, _ucslen, cmgr, all)
|
||||||
#define hawk_rtx_duputobcharswithcmgr(rtx, ucs, _ucslen, _bcslen, cmgr) hawk_gem_duputobcharswithcmgr(hawk_rtx_getgem(rtx), ucs, _ucslen, _bcslen, cmgr)
|
#define hawk_rtx_duputobcharswithcmgr(rtx, ucs, _ucslen, _bcslen, cmgr) hawk_gem_duputobcharswithcmgr(hawk_rtx_getgem(rtx), ucs, _ucslen, _bcslen, cmgr)
|
||||||
|
#define hawk_rtx_dupbcstrarrtoucstr(rtx, bcsarr, ucslen, all) hawk_gem_dupbcstrarrtoucstr(hawk_rtx_getgem(hawk), bcsarr, ucslen, all)
|
||||||
#define hawk_rtx_dupucstrarrtobcstr(rtx, ucsarr, bcslen) hawk_gem_dupucstrarrtobcstr(hawk_rtx_getgem(rtx), ucsarr, bcslen)
|
#define hawk_rtx_dupucstrarrtobcstr(rtx, ucsarr, bcslen) hawk_gem_dupucstrarrtobcstr(hawk_rtx_getgem(rtx), ucsarr, bcslen)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
# error QUADMATH.H NOT AVAILABLE or NOT COMPILABLE
|
# error QUADMATH.H NOT AVAILABLE or NOT COMPILABLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAWK_HAVE_CONFIG_H)
|
#if !defined(HAWK_HAVE_CFG_H)
|
||||||
# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||||
# define HAVE_CEIL
|
# define HAVE_CEIL
|
||||||
# define HAVE_FLOOR
|
# define HAVE_FLOOR
|
||||||
@ -64,7 +64,9 @@
|
|||||||
typedef struct modctx_t
|
typedef struct modctx_t
|
||||||
{
|
{
|
||||||
unsigned int seed;
|
unsigned int seed;
|
||||||
|
#if defined(HAVE_RANDOM_R)
|
||||||
struct random_data prand;
|
struct random_data prand;
|
||||||
|
#endif
|
||||||
} modctx_t;
|
} modctx_t;
|
||||||
|
|
||||||
static int fnc_math_1 (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, hawk_math1_t f)
|
static int fnc_math_1 (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, hawk_math1_t f)
|
||||||
@ -534,7 +536,13 @@ static int fnc_rand (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
|||||||
modctx_t* modctx;
|
modctx_t* modctx;
|
||||||
|
|
||||||
modctx = (modctx_t*)fi->mod->ctx;
|
modctx = (modctx_t*)fi->mod->ctx;
|
||||||
|
#if defined(HAVE_RANDOM_R)
|
||||||
random_r (&modctx->prand, &randv);
|
random_r (&modctx->prand, &randv);
|
||||||
|
#elif defined(HAVE_RANDOM)
|
||||||
|
randv = random();
|
||||||
|
#else
|
||||||
|
randv = rand();
|
||||||
|
#endif
|
||||||
|
|
||||||
r = hawk_rtx_makefltval(rtx, (hawk_flt_t)randv / RANDV_MAX);
|
r = hawk_rtx_makefltval(rtx, (hawk_flt_t)randv / RANDV_MAX);
|
||||||
if (r == HAWK_NULL) return -1;
|
if (r == HAWK_NULL) return -1;
|
||||||
@ -562,17 +570,29 @@ static int fnc_srand (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
|||||||
|
|
||||||
if (nargs <= 0)
|
if (nargs <= 0)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
hawk_ntime_t tv;
|
||||||
gettimeofday (&tv, HAWK_NULL);
|
hawk_get_time (&tv);
|
||||||
modctx->seed = tv.tv_sec * tv.tv_usec;
|
modctx->seed = tv.sec + tv.nsec;
|
||||||
|
#if defined(HAVE_RANDOM_R)
|
||||||
srandom_r (modctx->seed, &modctx->prand);
|
srandom_r (modctx->seed, &modctx->prand);
|
||||||
|
#elif defined(HAVE_RANDOM)
|
||||||
|
srandom (modctx->seed);
|
||||||
|
#else
|
||||||
|
srand (modctx->seed);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
a0 = hawk_rtx_getarg(rtx, 0);
|
a0 = hawk_rtx_getarg(rtx, 0);
|
||||||
n = hawk_rtx_valtoint(rtx, a0, &lv);
|
n = hawk_rtx_valtoint(rtx, a0, &lv);
|
||||||
if (n <= -1) return -1;
|
if (n <= -1) return -1;
|
||||||
|
#if defined(HAVE_RANDOM_R)
|
||||||
srandom_r (lv, &modctx->prand);
|
srandom_r (lv, &modctx->prand);
|
||||||
|
#elif defined(HAVE_RANDOM)
|
||||||
|
srandom (lv);
|
||||||
|
#else
|
||||||
|
srand (lv);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
r = hawk_rtx_makeintval (rtx, prev);
|
r = hawk_rtx_makeintval (rtx, prev);
|
||||||
@ -685,16 +705,22 @@ static void unload (hawk_mod_t* mod, hawk_t* awk)
|
|||||||
int hawk_mod_math (hawk_mod_t* mod, hawk_t* awk)
|
int hawk_mod_math (hawk_mod_t* mod, hawk_t* awk)
|
||||||
{
|
{
|
||||||
modctx_t* modctx;
|
modctx_t* modctx;
|
||||||
struct timeval tv;
|
hawk_ntime_t tv;
|
||||||
|
|
||||||
modctx = hawk_allocmem(awk, HAWK_SIZEOF(*modctx));
|
modctx = hawk_allocmem(awk, HAWK_SIZEOF(*modctx));
|
||||||
if (modctx == HAWK_NULL) return -1;
|
if (modctx == HAWK_NULL) return -1;
|
||||||
|
|
||||||
HAWK_MEMSET (modctx, 0, HAWK_SIZEOF(*modctx));
|
HAWK_MEMSET (modctx, 0, HAWK_SIZEOF(*modctx));
|
||||||
|
|
||||||
gettimeofday (&tv, HAWK_NULL);
|
hawk_get_time (&tv);
|
||||||
modctx->seed = tv.tv_sec * tv.tv_usec;
|
modctx->seed = tv.sec + tv.nsec;
|
||||||
|
#if defined(HAVE_RANDOM_R)
|
||||||
srandom_r (modctx->seed, &modctx->prand);
|
srandom_r (modctx->seed, &modctx->prand);
|
||||||
|
#elif defined(HAVE_RANDOM)
|
||||||
|
srandom (modctx->seed);
|
||||||
|
#else
|
||||||
|
srand (modctx->seed);
|
||||||
|
#endif
|
||||||
|
|
||||||
mod->query = query;
|
mod->query = query;
|
||||||
mod->unload = unload;
|
mod->unload = unload;
|
||||||
|
100
hawk/lib/pio.c
100
hawk/lib/pio.c
@ -257,23 +257,19 @@ static int make_param (hawk_pio_t* pio, const hawk_ooch_t* cmd, int flags, param
|
|||||||
if (flags & HAWK_PIO_SHELL) mcmd = (hawk_ooch_t*)cmd;
|
if (flags & HAWK_PIO_SHELL) mcmd = (hawk_ooch_t*)cmd;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mcmd = hawk_strdup (cmd, pio->mmgr);
|
mcmd = hawk_gem_dupoocstr(pio->gem, cmd, HAWK_NULL);
|
||||||
if (mcmd == HAWK_NULL)
|
if (mcmd == HAWK_NULL) goto oops;
|
||||||
{
|
|
||||||
pio->errnum = HAWK_PIO_ENOMEM;
|
|
||||||
goto oops;
|
|
||||||
}
|
|
||||||
|
|
||||||
fcnt = hawk_split_oocstr(mcmd, HAWK_T(""), HAWK_T('\"'), HAWK_T('\"'), HAWK_T('\\'));
|
fcnt = hawk_split_oocstr(mcmd, HAWK_T(""), HAWK_T('\"'), HAWK_T('\"'), HAWK_T('\\'));
|
||||||
if (fcnt <= 0)
|
if (fcnt <= 0)
|
||||||
{
|
{
|
||||||
/* no field or an error */
|
/* no field or an error */
|
||||||
pio->errnum = HAWK_PIO_EINVAL;
|
hawk_gem_seterrnum (pio->gem, HAWK_NULL, HAWK_EINVAL);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
/* the cmd is flagged to be of hawk_bch_t
|
/* the cmd is flagged to be of hawk_bch_t
|
||||||
* while the default character type is hawk_uch_t. */
|
* while the default character type is hawk_uch_t. */
|
||||||
@ -898,28 +894,30 @@ create_process:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_UCH)
|
#if defined(HAWK_OOCH_IS_UCH)
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
const hawk_bch_t* x[3];
|
const hawk_bch_t* x[3];
|
||||||
x[0] = mcmdname[create_retried];
|
x[0] = mcmdname[create_retried];
|
||||||
x[1] = (const hawk_bch_t*)cmd;
|
x[1] = (const hawk_bch_t*)cmd;
|
||||||
x[2] = HAWK_NULL;
|
x[2] = HAWK_NULL;
|
||||||
dupcmd = hawk_mbsatowcsdup(x, HAWK_NULL, mmgr);
|
dupcmd = hawk_gem_dupbcstrarrtoucstr(pio->gem, x, HAWK_NULL, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
#endif
|
const hawk_ooch_t* x[3];
|
||||||
dupcmd = hawk_strdup2(cmdname[create_retried], cmd, mmgr);
|
x[0] = cmdname[create_retried];
|
||||||
#if defined(HAWK_OOCH_IS_UCH)
|
x[1] = cmd;
|
||||||
|
x[2] = HAWK_NULL;
|
||||||
|
dupcmd = hawk_gem_dupoocstrarr(pio->gem, x, HAWK_NULL);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined(HAWK_OOCH_IS_UCH)
|
#if defined(HAWK_OOCH_IS_UCH)
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
dupcmd = hawk_dupbtoucstr (pio->gem, (const hawk_bch_t*)cmd, HAWK_NULL, 0);
|
dupcmd = hawk_gem_dupbtoucstr(pio->gem, (const hawk_bch_t*)cmd, HAWK_NULL, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1079,7 +1077,7 @@ create_process:
|
|||||||
|
|
||||||
if (maxidx == -1)
|
if (maxidx == -1)
|
||||||
{
|
{
|
||||||
pio->errnum = HAWK_PIO_EINVAL;
|
hawk_gem_seterrnum (pio->gem, HAWK_NULL, HAWK_EINVAL);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1195,46 +1193,38 @@ create_process:
|
|||||||
hawk_oow_t n, mn;
|
hawk_oow_t n, mn;
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
mn = hawk_strlen(cmd);
|
mn = hawk_count_oocstr(cmd);
|
||||||
#else
|
#else
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
mn = hawk_mbslen((const hawk_bch_t*)cmd);
|
mn = hawk_count_bcstr((const hawk_bch_t*)cmd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (hawk_wcstombs (cmd, &n, HAWK_NULL, &mn) <= -1)
|
if (hawk_gem_convutobcstr(pio->gem, cmd, &n, HAWK_NULL, &mn) <= -1) goto oops; /* illegal sequence found */
|
||||||
{
|
|
||||||
pio->errnum = HAWK_PIO_EINVAL;
|
|
||||||
goto oops; /* illegal sequence found */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
cmd_line = hawk_allocmem(hawk, ((11+mn+1+1) * HAWK_SIZEOF(*cmd_line)));
|
cmd_line = hawk_gem_allocmem(pio->gem, ((11+mn+1+1) * HAWK_SIZEOF(*cmd_line)));
|
||||||
if (cmd_line == HAWK_NULL)
|
if (cmd_line == HAWK_NULL) goto oops;
|
||||||
{
|
|
||||||
pio->errnum = HAWK_PIO_ENOMEM;
|
|
||||||
goto oops;
|
|
||||||
}
|
|
||||||
|
|
||||||
hawk_mbscpy (cmd_line, HAWK_BT("cmd.exe")); /* cmd.exe\0/c */
|
hawk_copy_bcstr_unlimited (cmd_line, "cmd.exe"); /* cmd.exe\0/c */
|
||||||
hawk_mbscpy (&cmd_line[8], HAWK_BT("/c "));
|
hawk_copy_bcstr_unlimited (&cmd_line[8], "/c ");
|
||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
hawk_mbscpy (&cmd_line[11], cmd);
|
hawk_copy_bcstr_unlimited (&cmd_line[11], cmd);
|
||||||
#else
|
#else
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
hawk_mbscpy (&cmd_line[11], (const hawk_bch_t*)cmd);
|
hawk_copy_bcstr_unlimited (&cmd_line[11], (const hawk_bch_t*)cmd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mn = mn + 1; /* update the buffer size */
|
mn = mn + 1; /* update the buffer size */
|
||||||
hawk_wcstombs (cmd, &n, &cmd_line[11], &mn);
|
hawk_gem_convutobcstr (pio->gem, cmd, &n, &cmd_line[11], &mn);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
cmd_line[11+mn+1] = HAWK_BT('\0'); /* additional \0 after \0 */
|
cmd_line[11+mn+1] = '\0'; /* additional \0 after \0 */
|
||||||
|
|
||||||
cmd_file = HAWK_BT("cmd.exe");
|
cmd_file = "cmd.exe";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1242,23 +1232,27 @@ create_process:
|
|||||||
hawk_oow_t mn;
|
hawk_oow_t mn;
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
|
const hawk_ooch_t* strarr[3];
|
||||||
|
|
||||||
|
strarr[0] = cmd;
|
||||||
|
strarr[1] = HAWK_T(" ");
|
||||||
|
strarr[2] = HAWK_NULL;
|
||||||
|
|
||||||
mn = hawk_count_oocstr(cmd);
|
mn = hawk_count_oocstr(cmd);
|
||||||
cmd_line = hawk_strdup2 (cmd, HAWK_T(" "), pio->mmgr);
|
cmd_line = hawk_dupucstrarr(pio->gem, strarr HAWK_NULL);
|
||||||
if (cmd_line == HAWK_NULL)
|
if (cmd_line == HAWK_NULL) goto oops;
|
||||||
{
|
|
||||||
pio->errnum = HAWK_PIO_ENOMEM;
|
|
||||||
goto oops;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
if (flags & HAWK_PIO_MBSCMD)
|
if (flags & HAWK_PIO_BCSTRCMD)
|
||||||
{
|
{
|
||||||
|
const hawk_bch_t* mbsarr[3];
|
||||||
|
|
||||||
|
mbsarr[0] = (const hawk_bch_t*)cmd;
|
||||||
|
mbsarr[1] = " ";
|
||||||
|
mbsarr[2] = HAWK_NULL;
|
||||||
|
|
||||||
mn = hawk_count_bcstr((const hawk_bch_t*)cmd);
|
mn = hawk_count_bcstr((const hawk_bch_t*)cmd);
|
||||||
cmd_line = hawk_mbsdup2 ((const hawk_bch_t*)cmd, HAWK_BT(" "), pio->mmgr);
|
cmd_line = hawk_dupbcstrarr(pio->gem, mbsarr, HAWK_NULL);
|
||||||
if (cmd_line == HAWK_NULL)
|
if (cmd_line == HAWK_NULL) goto oops;
|
||||||
{
|
|
||||||
pio->errnum = HAWK_PIO_ENOMEM;
|
|
||||||
goto oops;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1315,7 +1309,7 @@ create_process:
|
|||||||
#elif defined(__DOS__)
|
#elif defined(__DOS__)
|
||||||
|
|
||||||
/* DOS not multi-processed. can't support pio */
|
/* DOS not multi-processed. can't support pio */
|
||||||
pio->errnum = HAWK_PIO_ENOIMPL;
|
hawk_gem_seterrnum (pio->gem, HAWK_NULL, HAWK_ENOIMPL);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -457,7 +457,7 @@ hawk_ooi_t hawk_sio_putucstr (hawk_sio_t* sio, const hawk_uch_t* str)
|
|||||||
|
|
||||||
if (hawk_sio_flush (sio) <= -1) return -1; /* can't do buffering */
|
if (hawk_sio_flush (sio) <= -1) return -1; /* can't do buffering */
|
||||||
|
|
||||||
for (cur = str, left = hawk_wcslen(str); left > 0; cur += count, left -= count)
|
for (cur = str, left = hawk_count_ucstr(str); left > 0; cur += count, left -= count)
|
||||||
{
|
{
|
||||||
if (WriteConsoleW(sio->file.handle, cur, left, &count, HAWK_NULL) == FALSE)
|
if (WriteConsoleW(sio->file.handle, cur, left, &count, HAWK_NULL) == FALSE)
|
||||||
{
|
{
|
||||||
|
@ -41,10 +41,11 @@
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
# include <tchar.h>
|
# include <tchar.h>
|
||||||
# if defined(HAWK_HAVE_CONFIG_H) && defined(HAWK_ENABLE_LIBLTDL)
|
# if defined(HAWK_HAVE_CFG_H) && defined(HAWK_ENABLE_LIBLTDL)
|
||||||
# include <ltdl.h>
|
# include <ltdl.h>
|
||||||
# define USE_LTDL
|
# define USE_LTDL
|
||||||
# endif
|
# endif
|
||||||
|
# include <io.h>
|
||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
# define INCL_DOSMODULEMGR
|
# define INCL_DOSMODULEMGR
|
||||||
# define INCL_DOSPROCESS
|
# define INCL_DOSPROCESS
|
||||||
@ -65,7 +66,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAWK_HAVE_CONFIG_H)
|
#if !defined(HAWK_HAVE_CFG_H)
|
||||||
# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||||
# define HAVE_POW
|
# define HAVE_POW
|
||||||
# define HAVE_FMOD
|
# define HAVE_FMOD
|
||||||
@ -137,8 +138,6 @@ typedef struct xtn_t
|
|||||||
int gbl_argc;
|
int gbl_argc;
|
||||||
int gbl_argv;
|
int gbl_argv;
|
||||||
int gbl_environ;
|
int gbl_environ;
|
||||||
int gbl_errno;
|
|
||||||
int gbl_errstr;
|
|
||||||
|
|
||||||
hawk_ecb_t ecb;
|
hawk_ecb_t ecb;
|
||||||
int stdmod_up;
|
int stdmod_up;
|
||||||
@ -355,12 +354,8 @@ void* hawk_stdmodopen (hawk_t* awk, const hawk_mod_spec_t* spec)
|
|||||||
if (spec->postfix) tmp[count++] = spec->postfix;
|
if (spec->postfix) tmp[count++] = spec->postfix;
|
||||||
tmp[count] = HAWK_NULL;
|
tmp[count] = HAWK_NULL;
|
||||||
|
|
||||||
modpath = hawk_stradup (tmp, HAWK_NULL, hawk_getmmgr(awk));
|
modpath = hawk_dupoocstrarr(awk, tmp, HAWK_NULL);
|
||||||
if (!modpath)
|
if (!modpath) return HAWK_NULL;
|
||||||
{
|
|
||||||
hawk_seterrnum (awk, HAWK_ENOMEM, HAWK_NULL);
|
|
||||||
return HAWK_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
h = LoadLibrary (modpath);
|
h = LoadLibrary (modpath);
|
||||||
|
|
||||||
@ -3030,14 +3025,10 @@ static int add_globals (hawk_t* awk)
|
|||||||
xtn->gbl_argc = hawk_addgbl(awk, HAWK_T("ARGC"));
|
xtn->gbl_argc = hawk_addgbl(awk, HAWK_T("ARGC"));
|
||||||
xtn->gbl_argv = hawk_addgbl(awk, HAWK_T("ARGV"));
|
xtn->gbl_argv = hawk_addgbl(awk, HAWK_T("ARGV"));
|
||||||
xtn->gbl_environ = hawk_addgbl(awk, HAWK_T("ENVIRON"));
|
xtn->gbl_environ = hawk_addgbl(awk, HAWK_T("ENVIRON"));
|
||||||
xtn->gbl_errno = hawk_addgbl(awk, HAWK_T("ERRNO"));
|
|
||||||
xtn->gbl_errstr = hawk_addgbl(awk, HAWK_T("ERRSTR"));
|
|
||||||
|
|
||||||
return (xtn->gbl_argc <= -1 ||
|
return (xtn->gbl_argc <= -1 ||
|
||||||
xtn->gbl_argv <= -1 ||
|
xtn->gbl_argv <= -1 ||
|
||||||
xtn->gbl_environ <= -1 ||
|
xtn->gbl_environ <= -1)? -1: 0;
|
||||||
xtn->gbl_errno <= -1 ||
|
|
||||||
xtn->gbl_errstr <= -1)? -1: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct fnctab_t
|
struct fnctab_t
|
||||||
|
@ -446,10 +446,10 @@ retry:
|
|||||||
{
|
{
|
||||||
#ifdef TRE_WCHAR
|
#ifdef TRE_WCHAR
|
||||||
if (type == STR_WIDE)
|
if (type == STR_WIDE)
|
||||||
result = hawk_comp_ucstr_limited((const hawk_uch_t*)string + so, str_wide - 1, (size_t)bt_len);
|
result = hawk_comp_ucstr_limited((const hawk_uch_t*)string + so, str_wide - 1, (size_t)bt_len, 0);
|
||||||
else
|
else
|
||||||
#endif /* TRE_WCHAR */
|
#endif /* TRE_WCHAR */
|
||||||
result = hawk_comp_bcstr_limited((const char*)string + so, str_byte - 1, (size_t)bt_len);
|
result = hawk_comp_bcstr_limited((const char*)string + so, str_byte - 1, (size_t)bt_len, 0);
|
||||||
}
|
}
|
||||||
else if (len - pos < bt_len)
|
else if (len - pos < bt_len)
|
||||||
result = 1;
|
result = 1;
|
||||||
|
@ -195,30 +195,56 @@ int hawk_comp_bcstr (const hawk_bch_t* str1, const hawk_bch_t* str2, int ignorec
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_comp_ucstr_limited (const hawk_uch_t* str1, const hawk_uch_t* str2, hawk_oow_t maxlen)
|
int hawk_comp_ucstr_limited (const hawk_uch_t* str1, const hawk_uch_t* str2, hawk_oow_t maxlen, int ignorecase)
|
||||||
{
|
{
|
||||||
if (maxlen == 0) return 0;
|
if (maxlen == 0) return 0;
|
||||||
|
|
||||||
while (*str1 == *str2)
|
if (ignorecase)
|
||||||
{
|
{
|
||||||
if (*str1 == '\0' || maxlen == 1) return 0;
|
while (hawk_to_uch_lower(*str1) == hawk_to_uch_lower(*str2))
|
||||||
str1++; str2++; maxlen--;
|
{
|
||||||
}
|
if (*str1 == '\0' || maxlen == 1) return 0;
|
||||||
|
str1++; str2++; maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
return ((hawk_uchu_t)*str1 > (hawk_uchu_t)*str2)? 1: -1;
|
return ((hawk_uchu_t)hawk_to_uch_lower(*str1) > (hawk_uchu_t)hawk_to_uch_lower(*str2))? 1: -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*str1 == *str2)
|
||||||
|
{
|
||||||
|
if (*str1 == '\0' || maxlen == 1) return 0;
|
||||||
|
str1++; str2++; maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((hawk_uchu_t)*str1 > (hawk_uchu_t)*str2)? 1: -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_comp_bcstr_limited (const hawk_bch_t* str1, const hawk_bch_t* str2, hawk_oow_t maxlen)
|
int hawk_comp_bcstr_limited (const hawk_bch_t* str1, const hawk_bch_t* str2, hawk_oow_t maxlen, int ignorecase)
|
||||||
{
|
{
|
||||||
if (maxlen == 0) return 0;
|
if (maxlen == 0) return 0;
|
||||||
|
|
||||||
while (*str1 == *str2)
|
if (ignorecase)
|
||||||
{
|
{
|
||||||
if (*str1 == '\0' || maxlen == 1) return 0;
|
while (hawk_to_uch_lower(*str1) == hawk_to_uch_lower(*str2))
|
||||||
str1++; str2++; maxlen--;
|
{
|
||||||
}
|
if (*str1 == '\0' || maxlen == 1) return 0;
|
||||||
|
str1++; str2++; maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
return ((hawk_bchu_t)*str1 > (hawk_bchu_t)*str2)? 1: -1;
|
return ((hawk_bchu_t)hawk_to_uch_lower(*str1) > (hawk_bchu_t)hawk_to_uch_lower(*str2))? 1: -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*str1 == *str2)
|
||||||
|
{
|
||||||
|
if (*str1 == '\0' || maxlen == 1) return 0;
|
||||||
|
str1++; str2++; maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((hawk_bchu_t)*str1 > (hawk_bchu_t)*str2)? 1: -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_comp_ucstr_bcstr (const hawk_uch_t* str1, const hawk_bch_t* str2)
|
int hawk_comp_ucstr_bcstr (const hawk_uch_t* str1, const hawk_bch_t* str2)
|
||||||
|
Loading…
Reference in New Issue
Block a user