@@ -412,30 +412,29 @@ JL_DLLEXPORT int jl_os_get_group(jl_group_t *grp, size_t gid)
412
412
members ++ ;
413
413
}
414
414
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 ) {
418
417
free (buf );
419
418
return UV_ENOMEM ;
420
419
}
421
420
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
-
428
421
/* Copy the members */
429
- gr_mem = grp -> groupname + name_size ;
430
422
grp -> members = (char * * ) gr_mem ;
431
423
grp -> members [members ] = NULL ;
432
424
gr_mem = (char * ) ((char * * ) gr_mem + members + 1 );
433
425
for (r = 0 ; r < members ; r ++ ) {
434
426
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 ;
436
428
}
429
+ assert (gr_mem == (char * )grp -> members + mem_size );
437
430
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 ;
439
438
440
439
free (buf );
441
440
@@ -450,12 +449,12 @@ JL_DLLEXPORT void jl_os_free_group(jl_group_t *grp)
450
449
451
450
/*
452
451
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
454
453
to be freed.
455
454
*/
456
- free (grp -> groupname );
457
- grp -> groupname = NULL ;
455
+ free (grp -> members );
458
456
grp -> members = NULL ;
457
+ grp -> groupname = NULL ;
459
458
}
460
459
461
460
// --- buffer manipulation ---
0 commit comments