moved initialization of the sub programs to the main program
This commit is contained in:
parent
715085c778
commit
cbbc06179a
63
bin/hawk.c
63
bin/hawk.c
@ -1013,7 +1013,7 @@ static void print_hawk_rtx_error (hawk_rtx_t* rtx)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
||||||
{
|
{
|
||||||
hawk_t* hawk = HAWK_NULL;
|
hawk_t* hawk = HAWK_NULL;
|
||||||
hawk_rtx_t* rtx = HAWK_NULL;
|
hawk_rtx_t* rtx = HAWK_NULL;
|
||||||
@ -1206,7 +1206,7 @@ oops:
|
|||||||
|
|
||||||
if (arg.memlimit > 0)
|
if (arg.memlimit > 0)
|
||||||
{
|
{
|
||||||
if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, main_xma_dumper_without_hawk, HAWK_NULL);
|
if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, hawk_main_print_xma, HAWK_NULL);
|
||||||
hawk_fini_xma_mmgr (&xma_mmgr);
|
hawk_fini_xma_mmgr (&xma_mmgr);
|
||||||
}
|
}
|
||||||
freearg (&arg);
|
freearg (&arg);
|
||||||
@ -1214,62 +1214,3 @@ oops:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
char locale[100];
|
|
||||||
UINT codepage;
|
|
||||||
WSADATA wsadata;
|
|
||||||
int sock_inited = 0;
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
extern BOOL _watt_do_exit;
|
|
||||||
int sock_inited = 0;
|
|
||||||
#else
|
|
||||||
/* nothing special */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
codepage = GetConsoleOutputCP();
|
|
||||||
if (codepage == CP_UTF8)
|
|
||||||
{
|
|
||||||
/*SetConsoleOUtputCP (CP_UTF8);*/
|
|
||||||
/*hawk_setdflcmgrbyid (HAWK_CMGR_UTF8);*/
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* .codepage */
|
|
||||||
hawk_fmt_uintmax_to_bcstr (locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
|
|
||||||
setlocale (LC_ALL, locale);
|
|
||||||
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
setlocale (LC_ALL, "");
|
|
||||||
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0)
|
|
||||||
print_warning ("Failed to start up winsock\n");
|
|
||||||
else sock_inited = 1;
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
/* TODO: add an option to skip watt-32 */
|
|
||||||
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
|
||||||
if (sock_init() != 0) print_warning ("Failed to initialize watt-32\n");
|
|
||||||
else sock_inited = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = execute_hawk(argc, argv, real_argv0);
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
if (sock_inited) WSACleanup ();
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
if (sock_inited) sock_exit ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
98
bin/main.c
98
bin/main.c
@ -28,14 +28,51 @@
|
|||||||
#include <hawk.h>
|
#include <hawk.h>
|
||||||
#include <hawk-xma.h>
|
#include <hawk-xma.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
void main_xma_dumper_without_hawk (void* ctx, const hawk_bch_t* fmt, ...)
|
#if defined(_WIN32)
|
||||||
|
# include <windows.h>
|
||||||
|
#elif defined(__OS2__)
|
||||||
|
# define INCL_ERRORS
|
||||||
|
# include <os2.h>
|
||||||
|
# include <signal.h>
|
||||||
|
#elif defined(__DOS__)
|
||||||
|
# include <dos.h>
|
||||||
|
# include <signal.h>
|
||||||
|
#else
|
||||||
|
# include <unistd.h>
|
||||||
|
# include <errno.h>
|
||||||
|
# include <signal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
|
void hawk_main_print_xma (void* ctx, const hawk_bch_t* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
vfprintf (stderr, fmt, ap);
|
vfprintf (stderr, fmt, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
|
void hawk_main_print_error (const hawk_bch_t* fmt, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
fprintf (stderr, "ERROR: ");
|
||||||
|
va_start (va, fmt);
|
||||||
|
vfprintf (stderr, fmt, va);
|
||||||
|
va_end (va);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hawk_main_print_warning (const hawk_bch_t* fmt, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
fprintf (stderr, "WARNING: ");
|
||||||
|
va_start (va, fmt);
|
||||||
|
vfprintf (stderr, fmt, va);
|
||||||
|
va_end (va);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
@ -77,6 +114,51 @@ static struct {
|
|||||||
|
|
||||||
int main(int argc, hawk_bch_t* argv[])
|
int main(int argc, hawk_bch_t* argv[])
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
char locale[100];
|
||||||
|
UINT codepage;
|
||||||
|
WSADATA wsadata;
|
||||||
|
int sock_inited = 0;
|
||||||
|
#elif defined(__DOS__)
|
||||||
|
extern BOOL _watt_do_exit;
|
||||||
|
int sock_inited = 0;
|
||||||
|
#else
|
||||||
|
/* nothing special */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
codepage = GetConsoleOutputCP();
|
||||||
|
if (codepage == CP_UTF8)
|
||||||
|
{
|
||||||
|
/*SetConsoleOUtputCP(CP_UTF8);*/
|
||||||
|
/*hawk_setdflcmgrbyid(HAWK_CMGR_UTF8);*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* .codepage */
|
||||||
|
hawk_fmt_uintmax_to_bcstr(locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
|
||||||
|
setlocale(LC_ALL, locale);
|
||||||
|
/* hawk_setdflcmgrbyid(HAWK_CMGR_SLMB); */
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
/* hawk_setdflcmgrbyid(HAWK_CMGR_SLMB); */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0)
|
||||||
|
print_warning("Failed to start up winsock\n");
|
||||||
|
else sock_inited = 1;
|
||||||
|
#elif defined(__DOS__)
|
||||||
|
/* TODO: add an option to skip watt-32 */
|
||||||
|
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
||||||
|
if (sock_init() != 0) print_warning("Failed to initialize watt-32\n");
|
||||||
|
else sock_inited = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
{
|
{
|
||||||
hawk_oow_t i;
|
hawk_oow_t i;
|
||||||
@ -86,12 +168,22 @@ int main(int argc, hawk_bch_t* argv[])
|
|||||||
/* [NOTE]
|
/* [NOTE]
|
||||||
* if hawk is invoked via 'hawk --awk' or 'hawk --hawk',
|
* if hawk is invoked via 'hawk --awk' or 'hawk --hawk',
|
||||||
* the value ARGV[0] inside a hawk script is "--awk" or "--hawk" */
|
* the value ARGV[0] inside a hawk script is "--awk" or "--hawk" */
|
||||||
return entry_funcs[i].main(argc -1, &argv[1], argv[0]);
|
ret = entry_funcs[i].main(argc -1, &argv[1], argv[0]);
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return main_hawk(argc, argv, HAWK_NULL);
|
ret = main_hawk(argc, argv, HAWK_NULL);
|
||||||
|
|
||||||
|
done:
|
||||||
|
#if defined(_WIN32)
|
||||||
|
if (sock_inited) WSACleanup();
|
||||||
|
#elif defined(__DOS__)
|
||||||
|
if (sock_inited) sock_exit();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
@ -33,11 +33,13 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int main_cut(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
|
||||||
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
|
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
|
||||||
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
|
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
|
||||||
|
|
||||||
void main_xma_dumper_without_hawk (void* ctx, const hawk_bch_t* fmt, ...);
|
void hawk_main_print_xma (void* ctx, const hawk_bch_t* fmt, ...);
|
||||||
|
void hawk_main_print_error (const hawk_bch_t* fmt, ...);
|
||||||
|
void hawk_main_print_warning (const hawk_bch_t* fmt, ...);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
145
bin/sed.c
145
bin/sed.c
@ -98,7 +98,7 @@ struct arg_t
|
|||||||
|
|
||||||
/* ------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void print_error (const hawk_bch_t* fmt, ...)
|
static void print_error(const hawk_bch_t* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
fprintf (stderr, "ERROR: ");
|
fprintf (stderr, "ERROR: ");
|
||||||
@ -164,7 +164,7 @@ static int add_script (const hawk_bch_t* str, int mem)
|
|||||||
tmp = (hawk_sed_iostd_t*)realloc(g_script.io, HAWK_SIZEOF(*g_script.io) * (g_script.capa + 16 + 1));
|
tmp = (hawk_sed_iostd_t*)realloc(g_script.io, HAWK_SIZEOF(*g_script.io) * (g_script.capa + 16 + 1));
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("out of memory while processing %s\n", str);
|
print_error("out of memory while processing %s\n", str);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,12 +232,12 @@ static int handle_args (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_arg
|
|||||||
goto oops;
|
goto oops;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
print_error ("bad option - %c\n", opt.opt);
|
print_error("bad option - %c\n", opt.opt);
|
||||||
print_usage (stderr, argv[0], real_argv0);
|
print_usage (stderr, argv[0], real_argv0);
|
||||||
goto oops;
|
goto oops;
|
||||||
|
|
||||||
case ':':
|
case ':':
|
||||||
print_error ("bad parameter for %c\n", opt.opt);
|
print_error("bad parameter for %c\n", opt.opt);
|
||||||
print_usage (stderr, argv[0], real_argv0);
|
print_usage (stderr, argv[0], real_argv0);
|
||||||
goto oops;
|
goto oops;
|
||||||
|
|
||||||
@ -321,7 +321,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_arg
|
|||||||
g_script_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
g_script_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
||||||
if (g_script_cmgr == HAWK_NULL)
|
if (g_script_cmgr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("unknown script encoding - %s\n", opt.arg);
|
print_error("unknown script encoding - %s\n", opt.arg);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,7 +330,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_arg
|
|||||||
g_infile_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
g_infile_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
||||||
if (g_infile_cmgr == HAWK_NULL)
|
if (g_infile_cmgr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("unknown input file encoding - %s\n", opt.arg);
|
print_error("unknown input file encoding - %s\n", opt.arg);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -339,7 +339,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_arg
|
|||||||
g_outfile_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
g_outfile_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
|
||||||
if (g_outfile_cmgr == HAWK_NULL)
|
if (g_outfile_cmgr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("unknown output file encoding - %s\n", opt.arg);
|
print_error("unknown output file encoding - %s\n", opt.arg);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,17 +373,17 @@ done:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_exec_error (hawk_sed_t* sed)
|
void print_exec_error(hawk_sed_t* sed)
|
||||||
{
|
{
|
||||||
const hawk_loc_t* errloc = hawk_sed_geterrloc(sed);
|
const hawk_loc_t* errloc = hawk_sed_geterrloc(sed);
|
||||||
if (errloc->line > 0 || errloc->colm > 0)
|
if (errloc->line > 0 || errloc->colm > 0)
|
||||||
{
|
{
|
||||||
print_error ("cannot execute - %s at line %lu column %lu\n",
|
print_error("cannot execute - %s at line %lu column %lu\n",
|
||||||
hawk_sed_geterrbmsg(sed), (unsigned long)errloc->line, (unsigned long)errloc->colm);
|
hawk_sed_geterrbmsg(sed), (unsigned long)errloc->line, (unsigned long)errloc->colm);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print_error ("cannot execute - %s\n", hawk_sed_geterrbmsg(sed));
|
print_error("cannot execute - %s\n", hawk_sed_geterrbmsg(sed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -535,7 +535,7 @@ static void stop_run (int signo)
|
|||||||
int e = errno;
|
int e = errno;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
hawk_sed_halt (g_sed);
|
hawk_sed_halt(g_sed);
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__)
|
#if !defined(_WIN32) && !defined(__OS2__) && !defined(__DOS__)
|
||||||
errno = e;
|
errno = e;
|
||||||
@ -698,7 +698,7 @@ static int expand_wildcards (int argc, hawk_bch_t* argv[], int glob, xarg_t* xar
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
||||||
{
|
{
|
||||||
hawk_sed_t* sed = HAWK_NULL;
|
hawk_sed_t* sed = HAWK_NULL;
|
||||||
hawk_oow_t script_count;
|
hawk_oow_t script_count;
|
||||||
@ -721,7 +721,7 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
{
|
{
|
||||||
if (hawk_init_xma_mmgr(&xma_mmgr, arg.memlimit) <= -1)
|
if (hawk_init_xma_mmgr(&xma_mmgr, arg.memlimit) <= -1)
|
||||||
{
|
{
|
||||||
print_error ("cannot open memory heap\n");
|
print_error("cannot open memory heap\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
mmgr = &xma_mmgr;
|
mmgr = &xma_mmgr;
|
||||||
@ -731,7 +731,7 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
sed = hawk_sed_openstdwithmmgr(mmgr, 0, cmgr, HAWK_NULL);
|
sed = hawk_sed_openstdwithmmgr(mmgr, 0, cmgr, HAWK_NULL);
|
||||||
if (!sed)
|
if (!sed)
|
||||||
{
|
{
|
||||||
print_error ("cannot open stream editor\n");
|
print_error("cannot open stream editor\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -760,13 +760,13 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
|
|
||||||
if (errloc->line > 0 || errloc->colm > 0)
|
if (errloc->line > 0 || errloc->colm > 0)
|
||||||
{
|
{
|
||||||
print_error ("cannot compile %s - %s at line %lu column %lu\n",
|
print_error("cannot compile %s - %s at line %lu column %lu\n",
|
||||||
target, hawk_sed_geterrbmsg(sed), (unsigned long)errloc->line, (unsigned long)errloc->colm
|
target, hawk_sed_geterrbmsg(sed), (unsigned long)errloc->line, (unsigned long)errloc->colm
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print_error ("cannot compile %s - %s\n", target, hawk_sed_geterrbmsg(sed));
|
print_error("cannot compile %s - %s\n", target, hawk_sed_geterrbmsg(sed));
|
||||||
}
|
}
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
@ -805,7 +805,7 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
);
|
);
|
||||||
if (out_file.u.sio == HAWK_NULL)
|
if (out_file.u.sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("cannot open %s\n", arg.output_file);
|
print_error("cannot open %s\n", arg.output_file);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,7 +816,7 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
/* perform wild-card expansions for non-unix platforms */
|
/* perform wild-card expansions for non-unix platforms */
|
||||||
if (expand_wildcards(argc - arg.infile_pos, &argv[arg.infile_pos], arg.wildcard, &xarg) <= -1)
|
if (expand_wildcards(argc - arg.infile_pos, &argv[arg.infile_pos], arg.wildcard, &xarg) <= -1)
|
||||||
{
|
{
|
||||||
print_error ("out of memory\n");
|
print_error("out of memory\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -843,7 +843,7 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
tmpl_tmpfile = hawk_gem_dupbcstrarr(hawk_sed_getgem(sed), f, HAWK_NULL);
|
tmpl_tmpfile = hawk_gem_dupbcstrarr(hawk_sed_getgem(sed), f, HAWK_NULL);
|
||||||
if (tmpl_tmpfile == HAWK_NULL)
|
if (tmpl_tmpfile == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("out of memory\n");
|
print_error("out of memory\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,18 +864,18 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
{
|
{
|
||||||
if (retried)
|
if (retried)
|
||||||
{
|
{
|
||||||
print_error ("cannot open %s\n", tmpl_tmpfile);
|
print_error("cannot open %s\n", tmpl_tmpfile);
|
||||||
hawk_sed_freemem (sed, tmpl_tmpfile);
|
hawk_sed_freemem(sed, tmpl_tmpfile);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* retry to open the file with shorter names */
|
/* retry to open the file with shorter names */
|
||||||
hawk_sed_freemem (sed, tmpl_tmpfile);
|
hawk_sed_freemem(sed, tmpl_tmpfile);
|
||||||
tmpl_tmpfile = hawk_gem_dupbcstr(hawk_sed_getgem(sed), "TMP-XXXX", HAWK_NULL);
|
tmpl_tmpfile = hawk_gem_dupbcstr(hawk_sed_getgem(sed), "TMP-XXXX", HAWK_NULL);
|
||||||
if (tmpl_tmpfile == HAWK_NULL)
|
if (tmpl_tmpfile == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("out of memory\n");
|
print_error("out of memory\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
retried = 1;
|
retried = 1;
|
||||||
@ -888,38 +888,38 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
|
|
||||||
if (hawk_sed_execstd(sed, in, output) <= -1)
|
if (hawk_sed_execstd(sed, in, output) <= -1)
|
||||||
{
|
{
|
||||||
if (output) hawk_sio_close (output->u.sio);
|
if (output) hawk_sio_close(output->u.sio);
|
||||||
|
|
||||||
if (tmpl_tmpfile)
|
if (tmpl_tmpfile)
|
||||||
{
|
{
|
||||||
unlink (tmpl_tmpfile);
|
unlink (tmpl_tmpfile);
|
||||||
hawk_sed_freemem (sed, tmpl_tmpfile);
|
hawk_sed_freemem(sed, tmpl_tmpfile);
|
||||||
}
|
}
|
||||||
print_exec_error (sed);
|
print_exec_error(sed);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmpl_tmpfile)
|
if (tmpl_tmpfile)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (output == &out_inplace);
|
HAWK_ASSERT (output == &out_inplace);
|
||||||
hawk_sio_close (output->u.sio);
|
hawk_sio_close(output->u.sio);
|
||||||
output = output_file;
|
output = output_file;
|
||||||
|
|
||||||
if (rename(tmpl_tmpfile, in[0].u.fileb.path) <= -1)
|
if (rename(tmpl_tmpfile, in[0].u.fileb.path) <= -1)
|
||||||
{
|
{
|
||||||
print_error ("cannot rename %s to %s. not deleting %s\n",
|
print_error("cannot rename %s to %s. not deleting %s\n",
|
||||||
tmpl_tmpfile, in[0].u.fileb.path, tmpl_tmpfile);
|
tmpl_tmpfile, in[0].u.fileb.path, tmpl_tmpfile);
|
||||||
hawk_sed_freemem (sed, tmpl_tmpfile);
|
hawk_sed_freemem(sed, tmpl_tmpfile);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_sed_freemem (sed, tmpl_tmpfile);
|
hawk_sed_freemem(sed, tmpl_tmpfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hawk_sed_ishalt(sed)) break;
|
if (hawk_sed_ishalt(sed)) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output) hawk_sio_close (output->u.sio);
|
if (output) hawk_sio_close(output->u.sio);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -935,16 +935,16 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
/* input files are specified on the command line */
|
/* input files are specified on the command line */
|
||||||
|
|
||||||
/* perform wild-card expansions for non-unix platforms */
|
/* perform wild-card expansions for non-unix platforms */
|
||||||
if (expand_wildcards (argc - arg.infile_pos, &argv[arg.infile_pos], arg.wildcard, &xarg) <= -1)
|
if (expand_wildcards(argc - arg.infile_pos, &argv[arg.infile_pos], arg.wildcard, &xarg) <= -1)
|
||||||
{
|
{
|
||||||
print_error ("out of memory\n");
|
print_error("out of memory\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
in = (hawk_sed_iostd_t*)hawk_sed_allocmem(sed, HAWK_SIZEOF(*in) * (xarg.size + 1));
|
in = (hawk_sed_iostd_t*)hawk_sed_allocmem(sed, HAWK_SIZEOF(*in) * (xarg.size + 1));
|
||||||
if (in == HAWK_NULL)
|
if (in == HAWK_NULL)
|
||||||
{
|
{
|
||||||
print_error ("out of memory\n");
|
print_error("out of memory\n");
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -970,22 +970,22 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
/* arrange to be able to specify cmgr.
|
/* arrange to be able to specify cmgr.
|
||||||
* if not for cmgr, i could simply pass HAWK_NULL
|
* if not for cmgr, i could simply pass HAWK_NULL
|
||||||
* to hawk_sed_execstd() below like
|
* to hawk_sed_execstd() below like
|
||||||
* xx = hawk_sed_execstd (sed, in, HAWK_NULL); */
|
* xx = hawk_sed_execstd(sed, in, HAWK_NULL); */
|
||||||
out.type = HAWK_SED_IOSTD_FILEB;
|
out.type = HAWK_SED_IOSTD_FILEB;
|
||||||
out.u.fileb.path = HAWK_NULL;
|
out.u.fileb.path = HAWK_NULL;
|
||||||
out.u.fileb.cmgr = g_outfile_cmgr;
|
out.u.fileb.cmgr = g_outfile_cmgr;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_sed = sed;
|
g_sed = sed;
|
||||||
set_intr_run ();
|
set_intr_run();
|
||||||
xx = hawk_sed_execstd(sed, in, &out);
|
xx = hawk_sed_execstd(sed, in, &out);
|
||||||
if (in) hawk_sed_freemem (sed, in);
|
if (in) hawk_sed_freemem(sed, in);
|
||||||
unset_intr_run ();
|
unset_intr_run();
|
||||||
g_sed = HAWK_NULL;
|
g_sed = HAWK_NULL;
|
||||||
|
|
||||||
if (xx <= -1)
|
if (xx <= -1)
|
||||||
{
|
{
|
||||||
print_exec_error (sed);
|
print_exec_error(sed);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -993,72 +993,15 @@ static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
oops:
|
oops:
|
||||||
if (xarg_inited) purge_xarg (&xarg);
|
if (xarg_inited) purge_xarg(&xarg);
|
||||||
if (sed) hawk_sed_close (sed);
|
if (sed) hawk_sed_close(sed);
|
||||||
if (arg.memlimit > 0)
|
if (arg.memlimit > 0)
|
||||||
{
|
{
|
||||||
if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, main_xma_dumper_without_hawk, HAWK_NULL);
|
if (arg.debug) hawk_xma_dump(xma_mmgr.ctx, hawk_main_print_xma, HAWK_NULL);
|
||||||
hawk_fini_xma_mmgr (&xma_mmgr);
|
hawk_fini_xma_mmgr(&xma_mmgr);
|
||||||
}
|
}
|
||||||
free_scripts ();
|
free_scripts();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
char locale[100];
|
|
||||||
UINT codepage;
|
|
||||||
WSADATA wsadata;
|
|
||||||
int sock_inited = 0;
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
extern BOOL _watt_do_exit;
|
|
||||||
int sock_inited = 0;
|
|
||||||
#else
|
|
||||||
/* nothing special */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
codepage = GetConsoleOutputCP();
|
|
||||||
if (codepage == CP_UTF8)
|
|
||||||
{
|
|
||||||
/*SetConsoleOUtputCP (CP_UTF8);*/
|
|
||||||
/*hawk_setdflcmgrbyid (HAWK_CMGR_UTF8);*/
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* .codepage */
|
|
||||||
hawk_fmt_uintmax_to_bcstr (locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
|
|
||||||
setlocale (LC_ALL, locale);
|
|
||||||
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
setlocale (LC_ALL, "");
|
|
||||||
/* hawk_setdflcmgrbyid (HAWK_CMGR_SLMB); */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0)
|
|
||||||
print_warning ("Failed to start up winsock\n");
|
|
||||||
else sock_inited = 1;
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
/* TODO: add an option to skip watt-32 */
|
|
||||||
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
|
||||||
if (sock_init() != 0) print_warning ("Failed to initialize watt-32\n");
|
|
||||||
else sock_inited = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = execute_sed(argc, argv, real_argv0);
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
if (sock_inited) WSACleanup ();
|
|
||||||
#elif defined(__DOS__)
|
|
||||||
if (sock_inited) sock_exit ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user