Skip to content

Commit 9fc7a41

Browse files
committed
fixup! move platform-specific code to C, use libuv, refactor
1 parent dc77739 commit 9fc7a41

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

base/libc.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ function getpwuid(uid::Unsigned, throw_error::Bool=true)
435435
ref_pd = Ref(Cpasswd())
436436
ret = ccall(:jl_os_get_passwd, Cint, (Ref{Cpasswd}, UInt), ref_pd, uid)
437437
if ret != 0
438-
throw_error && uv_error("getpwuid", ret)
438+
throw_error && Base.uv_error("getpwuid", ret)
439439
return
440440
end
441441
pd = ref_pd[]
@@ -454,7 +454,7 @@ function getgrgid(gid::Unsigned, throw_error::Bool=true)
454454
ref_gp = Ref(Cgroup())
455455
ret = ccall(:jl_os_get_group, Cint, (Ref{Cgroup}, UInt), ref_gp, gid)
456456
if ret != 0
457-
throw_error && uv_error("getgrgid", ret)
457+
throw_error && Base.uv_error("getgrgid", ret)
458458
return
459459
end
460460
gp = ref_gp[]

src/sys.c

+14-15
Original file line numberDiff line numberDiff line change
@@ -412,30 +412,29 @@ JL_DLLEXPORT int jl_os_get_group(jl_group_t *grp, size_t gid)
412412
members++;
413413
}
414414

415-
grp->groupname = (char*)malloc(name_size + mem_size);
416-
417-
if (grp->groupname == NULL) {
415+
gr_mem = (char*)malloc(name_size + mem_size);
416+
if (gr_mem == NULL) {
418417
free(buf);
419418
return UV_ENOMEM;
420419
}
421420

422-
/* Copy the groupname */
423-
memcpy(grp->groupname, gp.gr_name, name_size);
424-
425-
/* Copy the gid */
426-
grp->gid = gp.gr_gid;
427-
428421
/* Copy the members */
429-
gr_mem = grp->groupname + name_size;
430422
grp->members = (char**) gr_mem;
431423
grp->members[members] = NULL;
432424
gr_mem = (char*) ((char**) gr_mem + members + 1);
433425
for (r = 0; r < members; r++) {
434426
grp->members[r] = gr_mem;
435-
gr_mem = stpcpy(gr_mem, gp.gr_mem[r]);
427+
gr_mem = stpcpy(gr_mem, gp.gr_mem[r]) + 1;
436428
}
429+
assert(gr_mem == (char*)grp->members + mem_size);
437430

438-
assert(gr_mem == buf + name_size + mem_size);
431+
/* Copy the groupname */
432+
grp->groupname = gr_mem;
433+
memcpy(grp->groupname, gp.gr_name, name_size);
434+
gr_mem += name_size;
435+
436+
/* Copy the gid */
437+
grp->gid = gp.gr_gid;
439438

440439
free(buf);
441440

@@ -450,12 +449,12 @@ JL_DLLEXPORT void jl_os_free_group(jl_group_t *grp)
450449

451450
/*
452451
The memory for is allocated in a single uv__malloc() call. The base of the
453-
pointer is stored in grp->groupname, so that is the only field that needs
452+
pointer is stored in grp->members, so that is the only field that needs
454453
to be freed.
455454
*/
456-
free(grp->groupname);
457-
grp->groupname = NULL;
455+
free(grp->members);
458456
grp->members = NULL;
457+
grp->groupname = NULL;
459458
}
460459

461460
// --- buffer manipulation ---

0 commit comments

Comments
 (0)