From 9fc7a41deda10cae2bc9e0e140b88f8d40f6b2db Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 31 May 2021 11:19:43 -0400 Subject: [PATCH] fixup! move platform-specific code to C, use libuv, refactor --- base/libc.jl | 4 ++-- src/sys.c | 29 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/base/libc.jl b/base/libc.jl index 23d40937ae248..98d2910917ee4 100644 --- a/base/libc.jl +++ b/base/libc.jl @@ -435,7 +435,7 @@ function getpwuid(uid::Unsigned, throw_error::Bool=true) ref_pd = Ref(Cpasswd()) ret = ccall(:jl_os_get_passwd, Cint, (Ref{Cpasswd}, UInt), ref_pd, uid) if ret != 0 - throw_error && uv_error("getpwuid", ret) + throw_error && Base.uv_error("getpwuid", ret) return end pd = ref_pd[] @@ -454,7 +454,7 @@ function getgrgid(gid::Unsigned, throw_error::Bool=true) ref_gp = Ref(Cgroup()) ret = ccall(:jl_os_get_group, Cint, (Ref{Cgroup}, UInt), ref_gp, gid) if ret != 0 - throw_error && uv_error("getgrgid", ret) + throw_error && Base.uv_error("getgrgid", ret) return end gp = ref_gp[] diff --git a/src/sys.c b/src/sys.c index e2d12bca7f7a5..da5b7dabbc7f6 100644 --- a/src/sys.c +++ b/src/sys.c @@ -412,30 +412,29 @@ JL_DLLEXPORT int jl_os_get_group(jl_group_t *grp, size_t gid) members++; } - grp->groupname = (char*)malloc(name_size + mem_size); - - if (grp->groupname == NULL) { + gr_mem = (char*)malloc(name_size + mem_size); + if (gr_mem == NULL) { free(buf); return UV_ENOMEM; } - /* Copy the groupname */ - memcpy(grp->groupname, gp.gr_name, name_size); - - /* Copy the gid */ - grp->gid = gp.gr_gid; - /* Copy the members */ - gr_mem = grp->groupname + name_size; grp->members = (char**) gr_mem; grp->members[members] = NULL; gr_mem = (char*) ((char**) gr_mem + members + 1); for (r = 0; r < members; r++) { grp->members[r] = gr_mem; - gr_mem = stpcpy(gr_mem, gp.gr_mem[r]); + gr_mem = stpcpy(gr_mem, gp.gr_mem[r]) + 1; } + assert(gr_mem == (char*)grp->members + mem_size); - assert(gr_mem == buf + name_size + mem_size); + /* Copy the groupname */ + grp->groupname = gr_mem; + memcpy(grp->groupname, gp.gr_name, name_size); + gr_mem += name_size; + + /* Copy the gid */ + grp->gid = gp.gr_gid; free(buf); @@ -450,12 +449,12 @@ JL_DLLEXPORT void jl_os_free_group(jl_group_t *grp) /* The memory for is allocated in a single uv__malloc() call. The base of the - pointer is stored in grp->groupname, so that is the only field that needs + pointer is stored in grp->members, so that is the only field that needs to be freed. */ - free(grp->groupname); - grp->groupname = NULL; + free(grp->members); grp->members = NULL; + grp->groupname = NULL; } // --- buffer manipulation ---