From 33ba9795122cc824f33f8a202dfb420cb0db3651 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Mon, 22 Dec 2025 02:05:09 +0900 Subject: [PATCH] added sys::dirname() and sys::basename() --- Makefile.am | 3 +- Makefile.in | 2 +- lib/Std.cpp | 2 +- lib/gem-glob.c | 106 ++++++++++++++++++-------------------- lib/hawk-utl.h | 13 +++++ lib/mod-sys.c | 126 +++++++++++++++++++++++++++++++-------------- lib/utl.c | 29 ++++++++++- samples/hawk51.cpp | 6 +-- 8 files changed, 185 insertions(+), 102 deletions(-) diff --git a/Makefile.am b/Makefile.am index 8d141efd..e977e792 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,8 @@ AUTOMAKE_OPTION = foreign ACLOCAL_AMFLAGS = -I m4 -EXTRA_DIST = +EXTRA_DIST = go.mod + SUBDIRS = SUBDIRS += tools lib mod bin samples t diff --git a/Makefile.in b/Makefile.in index a7a32a26..538eda64 100644 --- a/Makefile.in +++ b/Makefile.in @@ -374,7 +374,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTION = foreign ACLOCAL_AMFLAGS = -I m4 -EXTRA_DIST = +EXTRA_DIST = go.mod SUBDIRS = tools lib mod bin samples t #if ENABLE_STATIC_MODULE #SUBDIRS += tools mod lib bin samples t diff --git a/lib/Std.cpp b/lib/Std.cpp index 47093be9..f71e569f 100644 --- a/lib/Std.cpp +++ b/lib/Std.cpp @@ -251,7 +251,7 @@ HawkStd::Run* HawkStd::parse (Source& in, Source& out) int HawkStd::build_argcv (Run* run) { - Value argv (run); + Value argv(run); for (hawk_oow_t i = 0; i < this->runarg.len; i++) { diff --git a/lib/gem-glob.c b/lib/gem-glob.c index 229ecbed..311e799c 100644 --- a/lib/gem-glob.c +++ b/lib/gem-glob.c @@ -67,7 +67,7 @@ static hawk_bch_t* wcs_to_mbuf (hawk_gem_t* g, const hawk_uch_t* wcs, hawk_becs_ if (hawk_gem_convutobcstr(g, wcs, &wl, HAWK_NULL, &ml) <= -1 || hawk_becs_setlen(mbuf, ml) == (hawk_oow_t)-1) return HAWK_NULL; - hawk_gem_convutobcstr (g, wcs, &wl, HAWK_BECS_PTR(mbuf), &ml); + hawk_gem_convutobcstr(g, wcs, &wl, HAWK_BECS_PTR(mbuf), &ml); return HAWK_BECS_PTR(mbuf); } @@ -98,7 +98,7 @@ static int upath_exists (hawk_gem_t* g, const hawk_uch_t* name, hawk_becs_t* mbu mptr = wcs_to_mbuf(g, name, mbuf); if (HAWK_UNLIKELY(!mptr)) return -1; - x = _dos_getfileattr (mptr, &attr); + x = _dos_getfileattr(mptr, &attr); return (x == 0)? 1: ((errno == ENOENT)? 0: -1); #elif defined(macintosh) @@ -108,10 +108,10 @@ static int upath_exists (hawk_gem_t* g, const hawk_uch_t* name, hawk_becs_t* mbu mptr = wcs_to_mbuf(g, name, mbuf); if (HAWK_UNLIKELY(!mptr)) return -1; - HAWK_MEMSET (&fpb, 0, HAWK_SIZEOF(fpb)); + HAWK_MEMSET(&fpb, 0, HAWK_SIZEOF(fpb)); fpb.ioNamePtr = (unsigned char*)mptr; - return (PBGetCatInfoSync ((CInfoPBRec*)&fpb) == noErr)? 1: 0; + return (PBGetCatInfoSync((CInfoPBRec*)&fpb) == noErr)? 1: 0; #else struct stat st; const hawk_bch_t* mptr; @@ -147,7 +147,7 @@ static int bpath_exists (hawk_gem_t* g, const hawk_bch_t* name, hawk_becs_t* mbu #elif defined(macintosh) HFileInfo fpb; - HAWK_MEMSET (&fpb, 0, HAWK_SIZEOF(fpb)); + HAWK_MEMSET(&fpb, 0, HAWK_SIZEOF(fpb)); fpb.ioNamePtr = (unsigned char*)name; return (PBGetCatInfoSync((CInfoPBRec*)&fpb) == noErr)? 1: 0; #else @@ -162,9 +162,6 @@ static int bpath_exists (hawk_gem_t* g, const hawk_bch_t* name, hawk_becs_t* mbu #endif } - - - #if defined(NO_RECURSION) typedef struct __u_stack_node_t __u_stack_node_t; #endif @@ -303,7 +300,7 @@ static int __u_get_next_segment (__u_glob_t* g, __u_segment_t* seg) } else { - HAWK_ASSERT (seg->type == NORMAL); + HAWK_ASSERT(seg->type == NORMAL); seg->ptr = &seg->ptr[seg->len + 1]; seg->len = 0; @@ -344,9 +341,9 @@ static int __u_handle_non_wild_segments (__u_glob_t* g, __u_segment_t* seg) { while (__u_get_next_segment(g, seg) != NONE && !seg->wild) { - HAWK_ASSERT (seg->type != NONE && !seg->wild); + HAWK_ASSERT(seg->type != NONE && !seg->wild); - if (seg->sep && hawk_uecs_ccat (&g->path, seg->sep) == (hawk_oow_t)-1) return -1; + if (seg->sep && hawk_uecs_ccat(&g->path, seg->sep) == (hawk_oow_t)-1) return -1; if (seg->esc) { /* if the segment contains escape sequences, @@ -358,7 +355,7 @@ static int __u_handle_non_wild_segments (__u_glob_t* g, __u_segment_t* seg) int escaped = 0; if (HAWK_UECS_CAPA(&g->tbuf) < seg->len && - hawk_uecs_setcapa (&g->tbuf, seg->len) == (hawk_oow_t)-1) return -1; + hawk_uecs_setcapa(&g->tbuf, seg->len) == (hawk_oow_t)-1) return -1; tmp.ptr = HAWK_UECS_PTR(&g->tbuf); tmp.len = 0; @@ -381,13 +378,13 @@ static int __u_handle_non_wild_segments (__u_glob_t* g, __u_segment_t* seg) } } - if (hawk_uecs_ncat (&g->path, tmp.ptr, tmp.len) == (hawk_oow_t)-1) return -1; + if (hawk_uecs_ncat(&g->path, tmp.ptr, tmp.len) == (hawk_oow_t)-1) return -1; } else { /* if the segment doesn't contain escape sequences, * append the segment to the path without special handling */ - if (hawk_uecs_ncat (&g->path, seg->ptr, seg->len) == (hawk_oow_t)-1) return -1; + if (hawk_uecs_ncat(&g->path, seg->ptr, seg->len) == (hawk_oow_t)-1) return -1; } if (!seg->next && upath_exists(g->gem, HAWK_UECS_PTR(&g->path), &g->mbuf) > 0) @@ -434,7 +431,7 @@ entry: while (1) { - hawk_uecs_setlen (&g->path, tmp2); + hawk_uecs_setlen(&g->path, tmp2); x = hawk_dir_read(dp, &ent); if (x <= -1) @@ -497,12 +494,12 @@ entry: } } - hawk_uecs_setlen (&g->path, tmp); - hawk_dir_close (dp); dp = HAWK_NULL; + hawk_uecs_setlen(&g->path, tmp); + hawk_dir_close(dp); dp = HAWK_NULL; } } - HAWK_ASSERT (dp == HAWK_NULL); + HAWK_ASSERT(dp == HAWK_NULL); #if defined(NO_RECURSION) if (g->stack) @@ -531,29 +528,29 @@ entry: /* destory the free list */ r = g->free; g->free = r->next; - hawk_gem_freemem (g->gem, r); + hawk_gem_freemem(g->gem, r); } #endif return 0; oops: - if (dp) hawk_dir_close (dp); + if (dp) hawk_dir_close(dp); #if defined(NO_RECURSION) while (g->stack) { r = g->stack; g->stack = r->next; - hawk_dir_close (r->dp); - hawk_gem_freemem (g->gem, r); + hawk_dir_close(r->dp); + hawk_gem_freemem(g->gem, r); } while (g->free) { r = g->stack; g->free = r->next; - hawk_gem_freemem (g->gem, r); + hawk_gem_freemem(g->gem, r); } #endif return -1; @@ -565,7 +562,7 @@ int hawk_gem_uglob (hawk_gem_t* gem, const hawk_uch_t* pattern, hawk_gem_uglob_c __u_glob_t g; int x; - HAWK_MEMSET (&g, 0, HAWK_SIZEOF(g)); + HAWK_MEMSET(&g, 0, HAWK_SIZEOF(g)); g.gem = gem; g.cbimpl = cbimpl; g.cbctx = cbctx; @@ -583,7 +580,7 @@ int hawk_gem_uglob (hawk_gem_t* gem, const hawk_uch_t* pattern, hawk_gem_uglob_c if (hawk_uecs_init(&g.path, g.gem, 512) <= -1) return -1; if (hawk_uecs_init(&g.tbuf, g.gem, 256) <= -1) { - hawk_uecs_fini (&g.path); + hawk_uecs_fini(&g.path); return -1; } @@ -591,22 +588,22 @@ int hawk_gem_uglob (hawk_gem_t* gem, const hawk_uch_t* pattern, hawk_gem_uglob_c { if (hawk_becs_init(&g.mbuf, g.gem, 512) <= -1) { - hawk_uecs_fini (&g.path); - hawk_uecs_fini (&g.path); + hawk_uecs_fini(&g.path); + hawk_uecs_fini(&g.path); return -1; } } - HAWK_MEMSET (&seg, 0, HAWK_SIZEOF(seg)); + HAWK_MEMSET(&seg, 0, HAWK_SIZEOF(seg)); seg.type = NONE; seg.ptr = pattern; seg.len = 0; x = __u_search(&g, &seg); - if (HAWK_SIZEOF(hawk_uch_t) != HAWK_SIZEOF(hawk_uch_t)) hawk_becs_fini (&g.mbuf); - hawk_uecs_fini (&g.tbuf); - hawk_uecs_fini (&g.path); + if (HAWK_SIZEOF(hawk_uch_t) != HAWK_SIZEOF(hawk_uch_t)) hawk_becs_fini(&g.mbuf); + hawk_uecs_fini(&g.tbuf); + hawk_uecs_fini(&g.path); if (x <= -1) return -1; return g.expanded; @@ -753,7 +750,7 @@ static int __b_get_next_segment (__b_glob_t* g, __b_segment_t* seg) } else { - HAWK_ASSERT (seg->type == NORMAL); + HAWK_ASSERT(seg->type == NORMAL); seg->ptr = &seg->ptr[seg->len + 1]; seg->len = 0; @@ -794,21 +791,20 @@ static int __b_handle_non_wild_segments (__b_glob_t* g, __b_segment_t* seg) { while (__b_get_next_segment(g, seg) != NONE && !seg->wild) { - HAWK_ASSERT (seg->type != NONE && !seg->wild); + HAWK_ASSERT(seg->type != NONE && !seg->wild); - if (seg->sep && hawk_becs_ccat (&g->path, seg->sep) == (hawk_oow_t)-1) return -1; + if (seg->sep && hawk_becs_ccat(&g->path, seg->sep) == (hawk_oow_t)-1) return -1; if (seg->esc) { /* if the segment contains escape sequences, * strip the escape letters off the segment */ - hawk_bcs_t tmp; hawk_oow_t i; int escaped = 0; if (HAWK_BECS_CAPA(&g->tbuf) < seg->len && - hawk_becs_setcapa (&g->tbuf, seg->len) == (hawk_oow_t)-1) return -1; + hawk_becs_setcapa(&g->tbuf, seg->len) == (hawk_oow_t)-1) return -1; tmp.ptr = HAWK_BECS_PTR(&g->tbuf); tmp.len = 0; @@ -831,13 +827,13 @@ static int __b_handle_non_wild_segments (__b_glob_t* g, __b_segment_t* seg) } } - if (hawk_becs_ncat (&g->path, tmp.ptr, tmp.len) == (hawk_oow_t)-1) return -1; + if (hawk_becs_ncat(&g->path, tmp.ptr, tmp.len) == (hawk_oow_t)-1) return -1; } else { /* if the segment doesn't contain escape sequences, * append the segment to the path without special handling */ - if (hawk_becs_ncat (&g->path, seg->ptr, seg->len) == (hawk_oow_t)-1) return -1; + if (hawk_becs_ncat(&g->path, seg->ptr, seg->len) == (hawk_oow_t)-1) return -1; } if (!seg->next && bpath_exists(g->gem, HAWK_BECS_PTR(&g->path), &g->mbuf) > 0) @@ -884,7 +880,7 @@ entry: while (1) { - hawk_becs_setlen (&g->path, tmp2); + hawk_becs_setlen(&g->path, tmp2); x = hawk_dir_read(dp, &ent); if (x <= -1) @@ -947,12 +943,12 @@ entry: } } - hawk_becs_setlen (&g->path, tmp); - hawk_dir_close (dp); dp = HAWK_NULL; + hawk_becs_setlen(&g->path, tmp); + hawk_dir_close(dp); dp = HAWK_NULL; } } - HAWK_ASSERT (dp == HAWK_NULL); + HAWK_ASSERT(dp == HAWK_NULL); #if defined(NO_RECURSION) if (g->stack) @@ -981,29 +977,29 @@ entry: /* destory the free list */ r = g->free; g->free = r->next; - hawk_gem_freemem (g->gem, r); + hawk_gem_freemem(g->gem, r); } #endif return 0; oops: - if (dp) hawk_dir_close (dp); + if (dp) hawk_dir_close(dp); #if defined(NO_RECURSION) while (g->stack) { r = g->stack; g->stack = r->next; - hawk_dir_close (r->dp); - hawk_gem_freemem (g->gem, r); + hawk_dir_close(r->dp); + hawk_gem_freemem(g->gem, r); } while (g->free) { r = g->stack; g->free = r->next; - hawk_gem_freemem (g->gem, r); + hawk_gem_freemem(g->gem, r); } #endif return -1; @@ -1015,7 +1011,7 @@ int hawk_gem_bglob (hawk_gem_t* gem, const hawk_bch_t* pattern, hawk_gem_bglob_c __b_glob_t g; int x; - HAWK_MEMSET (&g, 0, HAWK_SIZEOF(g)); + HAWK_MEMSET(&g, 0, HAWK_SIZEOF(g)); g.gem = gem; g.cbimpl = cbimpl; g.cbctx = cbctx; @@ -1033,7 +1029,7 @@ int hawk_gem_bglob (hawk_gem_t* gem, const hawk_bch_t* pattern, hawk_gem_bglob_c if (hawk_becs_init(&g.path, g.gem, 512) <= -1) return -1; if (hawk_becs_init(&g.tbuf, g.gem, 256) <= -1) { - hawk_becs_fini (&g.path); + hawk_becs_fini(&g.path); return -1; } @@ -1041,22 +1037,22 @@ int hawk_gem_bglob (hawk_gem_t* gem, const hawk_bch_t* pattern, hawk_gem_bglob_c { if (hawk_becs_init(&g.mbuf, g.gem, 512) <= -1) { - hawk_becs_fini (&g.path); - hawk_becs_fini (&g.path); + hawk_becs_fini(&g.path); + hawk_becs_fini(&g.path); return -1; } } - HAWK_MEMSET (&seg, 0, HAWK_SIZEOF(seg)); + HAWK_MEMSET(&seg, 0, HAWK_SIZEOF(seg)); seg.type = NONE; seg.ptr = pattern; seg.len = 0; x = __b_search(&g, &seg); - if (HAWK_SIZEOF(hawk_bch_t) != HAWK_SIZEOF(hawk_uch_t)) hawk_becs_fini (&g.mbuf); - hawk_becs_fini (&g.tbuf); - hawk_becs_fini (&g.path); + if (HAWK_SIZEOF(hawk_bch_t) != HAWK_SIZEOF(hawk_uch_t)) hawk_becs_fini(&g.mbuf); + hawk_becs_fini(&g.tbuf); + hawk_becs_fini(&g.path); if (x <= -1) return -1; return g.expanded; diff --git a/lib/hawk-utl.h b/lib/hawk-utl.h index bf42ce9b..5ff59cd7 100644 --- a/lib/hawk-utl.h +++ b/lib/hawk-utl.h @@ -778,10 +778,23 @@ HAWK_EXPORT const hawk_bch_t* hawk_get_base_name_bcstr ( const hawk_bch_t* path ); +HAWK_EXPORT const hawk_uch_t* hawk_get_base_name_uchars ( + const hawk_uch_t* path, + hawk_oow_t len +); + +HAWK_EXPORT const hawk_bch_t* hawk_get_base_name_bchars ( + const hawk_bch_t* path, + hawk_oow_t len +); + #if defined(HAWK_OOCH_IS_UCH) # define hawk_get_base_name_oocstr hawk_get_base_name_ucstr +# define hawk_get_base_name_oochars hawk_get_base_name_uchars #else # define hawk_get_base_name_oocstr hawk_get_base_name_bcstr +# define hawk_get_base_name_ochars hawk_get_base_name_bchars + #endif /* ========================================================================= diff --git a/lib/mod-sys.c b/lib/mod-sys.c index 2dc30547..7865f4b4 100644 --- a/lib/mod-sys.c +++ b/lib/mod-sys.c @@ -273,7 +273,7 @@ enum mux_evt_code_t static hawk_int_t copy_error_to_sys_list (hawk_rtx_t* rtx, sys_list_t* sys_list) { hawk_errnum_t errnum = hawk_rtx_geterrnum(rtx); - hawk_copy_oocstr (sys_list->ctx.errmsg, HAWK_COUNTOF(sys_list->ctx.errmsg), hawk_rtx_geterrmsg(rtx)); + hawk_copy_oocstr(sys_list->ctx.errmsg, HAWK_COUNTOF(sys_list->ctx.errmsg), hawk_rtx_geterrmsg(rtx)); return ERRNUM_TO_RC(errnum); } @@ -367,7 +367,7 @@ static void chain_sys_node_to_mux_node (sys_node_t* mux_node, sys_node_t* node) sys_node_data_mux_t* mux_data = &mux_node->ctx.u.mux; sys_node_data_file_t* file_data = &node->ctx.u.file; - HAWK_ASSERT (!(node->ctx.flags & SYS_NODE_DATA_FLAG_IN_MUX)); + HAWK_ASSERT(!(node->ctx.flags & SYS_NODE_DATA_FLAG_IN_MUX)); node->ctx.flags |= SYS_NODE_DATA_FLAG_IN_MUX; file_data->mux = mux_node; @@ -384,7 +384,7 @@ static void unchain_sys_node_from_mux_node (sys_node_t* mux_node, sys_node_t* no sys_node_data_mux_t* mux_data = &mux_node->ctx.u.mux; sys_node_data_file_t* file_data = &node->ctx.u.file; - HAWK_ASSERT (node->ctx.flags & SYS_NODE_DATA_FLAG_IN_MUX); + HAWK_ASSERT(node->ctx.flags & SYS_NODE_DATA_FLAG_IN_MUX); node->ctx.flags &= ~SYS_NODE_DATA_FLAG_IN_MUX; if (file_data->x_prev) ((sys_node_t*)file_data->x_prev)->ctx.u.file.x_next = file_data->x_next; @@ -501,7 +501,7 @@ static HAWK_INLINE rtx_data_t* rtx_to_data (hawk_rtx_t* rtx, const hawk_fnc_info mod_ctx_t* mctx = (mod_ctx_t*)fi->mod->ctx; hawk_rbt_pair_t* pair; pair = hawk_rbt_search(mctx->rtxtab, &rtx, HAWK_SIZEOF(rtx)); - HAWK_ASSERT (pair != HAWK_NULL); + HAWK_ASSERT(pair != HAWK_NULL); return (rtx_data_t*)HAWK_RBT_VPTR(pair); } @@ -637,7 +637,7 @@ static int fnc_open (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) goto fail; } rx = new_node->id; - HAWK_ASSERT (rx >= 0); + HAWK_ASSERT(rx >= 0); } else { @@ -650,7 +650,7 @@ static int fnc_open (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = copy_error_to_sys_list(rtx, sys_list); } - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -686,14 +686,14 @@ static int fnc_openfd (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) if (!sys_node) goto fail; rx = sys_node->id; - HAWK_ASSERT (rx >= 0); + HAWK_ASSERT(rx >= 0); } else { rx = set_error_on_sys_list(rtx, sys_list, HAWK_EINVAL, HAWK_T("invalid file descriptor %jd"), (hawk_intmax_t)fd); } - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -997,7 +997,7 @@ static int fnc_dup (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } done: - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); /* assume a file descriptor never gets larger than HAWK_INT_MAX */ + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); /* assume a file descriptor never gets larger than HAWK_INT_MAX */ hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -1083,12 +1083,12 @@ static int fnc_flock (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) hawk_int_t rx; hawk_val_t* retv; - HAWK_STATIC_ASSERT (FLOCK_GET != F_RDLCK); - HAWK_STATIC_ASSERT (FLOCK_GET != F_WRLCK); - HAWK_STATIC_ASSERT (FLOCK_GET != F_UNLCK); - HAWK_STATIC_ASSERT (FLOCK_WAIT != F_RDLCK); - HAWK_STATIC_ASSERT (FLOCK_WAIT != F_WRLCK); - HAWK_STATIC_ASSERT (FLOCK_WAIT != F_UNLCK); + HAWK_STATIC_ASSERT(FLOCK_GET != F_RDLCK); + HAWK_STATIC_ASSERT(FLOCK_GET != F_WRLCK); + HAWK_STATIC_ASSERT(FLOCK_GET != F_UNLCK); + HAWK_STATIC_ASSERT(FLOCK_WAIT != F_RDLCK); + HAWK_STATIC_ASSERT(FLOCK_WAIT != F_WRLCK); + HAWK_STATIC_ASSERT(FLOCK_WAIT != F_UNLCK); sys_list = rtx_to_sys_list(rtx, fi); sys_node = get_sys_list_node_with_arg(rtx, sys_list, hawk_rtx_getarg(rtx, 0), SYS_NODE_DATA_TYPE_FILE, &rx); @@ -1774,7 +1774,7 @@ static int fnc_opendir (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = copy_error_to_sys_list(rtx, sys_list); } - /*HAWK_ASSERT (HAWK_IN_INT_RANGE(rx));*/ + /*HAWK_ASSERT(HAWK_IN_INT_RANGE(rx));*/ hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -2823,7 +2823,7 @@ done: if (val) hawk_rtx_freevalbcstr(rtx, a1, val); if (var) hawk_rtx_freevalbcstr(rtx, a0, var); - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -2865,7 +2865,7 @@ static int fnc_unsetenv (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) done: if (str) hawk_rtx_freevalbcstr(rtx, a0, str); - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3032,7 +3032,7 @@ static int fnc_system (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) done: if (str) hawk_rtx_freevaloocstr(rtx, a0, str); - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3081,7 +3081,7 @@ static int fnc_chroot (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3133,7 +3133,7 @@ static int fnc_chmod (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3213,7 +3213,7 @@ static int fnc_mkdir (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3289,7 +3289,7 @@ static int fnc_rmdir (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3367,7 +3367,7 @@ static int fnc_unlink (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3415,7 +3415,7 @@ static int fnc_symlink (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3584,7 +3584,7 @@ static int fnc_stat (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } done: #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3649,7 +3649,7 @@ static int fnc_utime (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) } #endif - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3705,7 +3705,7 @@ static int fnc_openmux (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = set_error_on_sys_list(rtx, sys_list, HAWK_ENOIMPL, HAWK_NULL); #endif - /*HAWK_ASSERT (HAWK_IN_INT_RANGE(rx));*/ + /*HAWK_ASSERT(HAWK_IN_INT_RANGE(rx));*/ hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -3966,11 +3966,11 @@ static int fnc_getmuxevt (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) goto done; } - HAWK_ASSERT (HAWK_IN_INT_RANGE(file_node->id)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(file_node->id)); x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 2), hawk_rtx_makeintval(rtx, file_node->id)); if (x <= -1) goto fail; - HAWK_ASSERT (HAWK_IN_INT_RANGE(mux_data->x_evt[index].events)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(mux_data->x_evt[index].events)); x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 3), hawk_rtx_makeintval(rtx, mux_data->x_evt[index].events)); if (x <= -1) goto fail; } @@ -4017,7 +4017,7 @@ static int fnc_sockaddrdom (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = copy_error_to_sys_list(rtx, sys_list); } - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -4050,7 +4050,7 @@ static int fnc_socket (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) { new_node->ctx.type = SYS_NODE_DATA_TYPE_SCK; /* override the type to socket */ rx = new_node->id; - HAWK_ASSERT (rx >= 0); + HAWK_ASSERT(rx >= 0); } } else @@ -4058,7 +4058,7 @@ static int fnc_socket (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = set_error_on_sys_list_with_errno(rtx, sys_list, HAWK_NULL); } - HAWK_ASSERT (HAWK_IN_INT_RANGE(rx)); + HAWK_ASSERT(HAWK_IN_INT_RANGE(rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); return 0; } @@ -4434,7 +4434,7 @@ static int fnc_accept (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) new_node->ctx.type = SYS_NODE_DATA_TYPE_SCK; /* override the type to socket */ rx = new_node->id; - HAWK_ASSERT (rx >= 0); + HAWK_ASSERT(rx >= 0); } done: @@ -4536,7 +4536,7 @@ static void open_remote_log_socket (hawk_rtx_t* rtx, rtx_data_t* rdp) int domain = hawk_skad_get_family(&rdp->log.skad); int type = SOCK_DGRAM; - HAWK_ASSERT (rdp->log.sck <= -1); + HAWK_ASSERT(rdp->log.sck <= -1); #if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC) type |= SOCK_NONBLOCK; @@ -4618,7 +4618,7 @@ static int fnc_openlog (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) log_type = SYSLOG_REMOTE; actual_ident = ident + pfxlen; actual_ident_len = ident_len - pfxlen; - slash = hawk_rfind_oochar_in_oochars(actual_ident, actual_ident_len, '/'); // fine the last slash + slash = hawk_rfind_oochar_in_oochars(actual_ident, actual_ident_len, '/'); // find the last slash if (!slash) { rx = set_error_on_sys_list(rtx, sys_list, HAWK_EINVAL, HAWK_T("invalid identifier '%js' with remote address"), ident); @@ -5257,7 +5257,7 @@ static hawk_int_t pack_data (hawk_rtx_t* rtx, const hawk_oocs_t* fmt, const hawk hawk_flt_t v; float x; hawk_uint32_t y; - HAWK_ASSERT (HAWK_SIZEOF(float) == HAWK_SIZEOF(hawk_uint32_t)); + HAWK_ASSERT(HAWK_SIZEOF(float) == HAWK_SIZEOF(hawk_uint32_t)); PACK_CHECK_ARG_AND_BUF(rep_cnt, HAWK_SIZEOF(hawk_uint32_t) * rep_cnt); for (rc = 0; rc < rep_cnt; rc++) { @@ -5274,7 +5274,7 @@ static hawk_int_t pack_data (hawk_rtx_t* rtx, const hawk_oocs_t* fmt, const hawk hawk_flt_t v; double x; hawk_uint64_t y; - HAWK_ASSERT (HAWK_SIZEOF(double) == HAWK_SIZEOF(hawk_uint64_t)); + HAWK_ASSERT(HAWK_SIZEOF(double) == HAWK_SIZEOF(hawk_uint64_t)); PACK_CHECK_ARG_AND_BUF(rep_cnt, HAWK_SIZEOF(hawk_uint64_t) * rep_cnt); for (rc = 0; rc < rep_cnt; rc++) { @@ -5867,6 +5867,52 @@ fail: goto done; } +/* ----------------------------------------------------------------------- */ +static int fnc_basename (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) +{ + hawk_val_t* a0, * tmp; + hawk_oocs_t path; + const hawk_ooch_t* ptr; + + a0 = hawk_rtx_getarg(rtx, 0); + + path.ptr = hawk_rtx_getvaloocstr(rtx, a0, &path.len); + if (HAWK_UNLIKELY(!path.ptr)) return -1; + + ptr = hawk_get_base_name_oochars(path.ptr, path.len); + + tmp = hawk_rtx_makestrvalwithoocstr(rtx, ptr); + hawk_rtx_freevaloocstr(rtx, a0, path.ptr); + if (HAWK_UNLIKELY(!tmp)) return -1; + + hawk_rtx_setretval(rtx, tmp); + return 0; +} + +static int fnc_dirname (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) +{ + hawk_val_t* a0, * tmp; + hawk_oocs_t path; + const hawk_ooch_t* ptr; + hawk_oow_t len; + + a0 = hawk_rtx_getarg(rtx, 0); + + path.ptr = hawk_rtx_getvaloocstr(rtx, a0, &path.len); + if (HAWK_UNLIKELY(!path.ptr)) return -1; + + ptr = hawk_get_base_name_oochars(path.ptr, path.len); + + len = ptr - path.ptr; + if (len > 1) len--; + tmp = hawk_rtx_makestrvalwithoochars(rtx, path.ptr, len); + hawk_rtx_freevaloocstr(rtx, a0, path.ptr); + if (HAWK_UNLIKELY(!tmp)) return -1; + + hawk_rtx_setretval(rtx, tmp); + return 0; +} + /* ----------------------------------------------------------------------- */ #define A_MAX HAWK_TYPE_MAX(hawk_oow_t) @@ -5884,6 +5930,7 @@ static hawk_mod_fnc_tab_t fnctab[] = { HAWK_T("WTERMSIG"), { { 1, 1, HAWK_NULL }, fnc_wtermsig, 0 } }, { HAWK_T("accept"), { { 1, 3, HAWK_T("vvr") }, fnc_accept, 0 } }, { HAWK_T("addtomux"), { { 3, 3, HAWK_NULL }, fnc_addtomux, 0 } }, + { HAWK_T("basename"), { { 1, 1, HAWK_NULL }, fnc_basename, 0 } }, { HAWK_T("bind"), { { 2, 2, HAWK_NULL }, fnc_bind, 0 } }, { HAWK_T("chmod"), { { 2, 2, HAWK_NULL }, fnc_chmod, 0 } }, { HAWK_T("chroot"), { { 1, 1, HAWK_NULL }, fnc_chroot, 0 } }, @@ -5893,6 +5940,7 @@ static hawk_mod_fnc_tab_t fnctab[] = { HAWK_T("closemux"), { { 1, 1, HAWK_NULL }, fnc_closemux, 0 } }, { HAWK_T("connect"), { { 2, 2, HAWK_NULL }, fnc_connect, 0 } }, { HAWK_T("delfrommux"), { { 2, 2, HAWK_NULL }, fnc_delfrommux, 0 } }, + { HAWK_T("dirname"), { { 1, 1, HAWK_NULL }, fnc_dirname, 0 } }, { HAWK_T("dup"), { { 1, 3, HAWK_NULL }, fnc_dup, 0 } }, { HAWK_T("errmsg"), { { 0, 0, HAWK_NULL }, fnc_errmsg, 0 } }, { HAWK_T("fchmod"), { { 2, 2, HAWK_NULL }, fnc_fchmod, 0 } }, @@ -6395,7 +6443,7 @@ static void unload (hawk_mod_t* mod, hawk_t* hawk) { mod_ctx_t* mctx = (mod_ctx_t*)mod->ctx; - HAWK_ASSERT (HAWK_RBT_SIZE(mctx->rtxtab) == 0); + HAWK_ASSERT(HAWK_RBT_SIZE(mctx->rtxtab) == 0); hawk_rbt_close(mctx->rtxtab); hawk_freemem(hawk, mctx); diff --git a/lib/utl.c b/lib/utl.c index 9704a966..26281baf 100644 --- a/lib/utl.c +++ b/lib/utl.c @@ -524,7 +524,7 @@ const hawk_uch_t* hawk_get_base_name_ucstr (const hawk_uch_t* path) if (IS_PATH_SEP(*p)) last = p; } - return last? (last +1): path; + return last? (last + 1): path; } const hawk_bch_t* hawk_get_base_name_bcstr (const hawk_bch_t* path) @@ -536,6 +536,31 @@ const hawk_bch_t* hawk_get_base_name_bcstr (const hawk_bch_t* path) if (IS_PATH_SEP(*p)) last = p; } - return last? (last +1): path; + return last? (last + 1): path; } +const hawk_uch_t* hawk_get_base_name_uchars (const hawk_uch_t* path, hawk_oow_t len) +{ + const hawk_uch_t* p, * last = HAWK_NULL; + const hawk_uch_t* end = path + len; + + for (p = path; p < end; p++) + { + if (IS_PATH_SEP(*p)) last = p; + } + + return last? (last + 1): path; +} + +const hawk_bch_t* hawk_get_base_name_bchars (const hawk_bch_t* path, hawk_oow_t len) +{ + const hawk_bch_t* p, * last = HAWK_NULL; + const hawk_bch_t* end = path + len; + + for (p = path; p < end; p++) + { + if (IS_PATH_SEP(*p)) last = p; + } + + return last? (last + 1): path; +} diff --git a/samples/hawk51.cpp b/samples/hawk51.cpp index 7406dd9f..75aab182 100644 --- a/samples/hawk51.cpp +++ b/samples/hawk51.cpp @@ -62,7 +62,7 @@ public: int open () { - if (HawkStd::open () <= -1) return -1; + if (HawkStd::open() <= -1) return -1; idLastSleep = this->addGlobal(HAWK_T("LAST_SLEEP")); if (idLastSleep <= -1) goto oops; @@ -413,7 +413,7 @@ static int hawk_main (MyHawk& hawk, int argc, hawk_bch_t* argv[]) cmdline_t cmdline; int n; - hawk.setTrait (hawk.getTrait() | HAWK_FLEXMAP | HAWK_RWPIPE | HAWK_NEXTOFILE); + hawk.setTrait(hawk.getTrait() | HAWK_FLEXMAP | HAWK_RWPIPE | HAWK_NEXTOFILE); // ARGV[0] if (hawk.addArgument(HAWK_T("hawk51")) <= -1) @@ -424,7 +424,7 @@ static int hawk_main (MyHawk& hawk, int argc, hawk_bch_t* argv[]) if ((n = handle_cmdline(hawk, argc, argv, &cmdline)) <= 0) return n; - if (cmdline.incdirs) hawk.setIncludeDirs (cmdline.incdirs); + if (cmdline.incdirs) hawk.setIncludeDirs(cmdline.incdirs); MyHawk::Source* in, * out; MyHawk::SourceString in_str(cmdline.ins); MyHawk::SourceFile in_file(cmdline.inf);