diff options
| author | Meili C <sweetbabyalaska@gmail.com> | 2024-12-21 15:42:28 -0900 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2024-12-22 21:48:47 +0100 |
| commit | 0f17cbfc6a19e639d6cb3f764e32b77e8c2869e7 (patch) | |
| tree | f9a33a952141560d0972b955a25995e56330e180 /src/InternPool.zig | |
| parent | 77c63ac36034db577a9287c54fb6771429a7428f (diff) | |
| download | zig-0f17cbfc6a19e639d6cb3f764e32b77e8c2869e7.tar.gz zig-0f17cbfc6a19e639d6cb3f764e32b77e8c2869e7.zip | |
fix: allow std.linux.getgroups to accept null
looking at `man getgroups` and `info getgroups` this is given as an
example:
```c
// Here's how to use ‘getgroups’ to read all the supplementary group
// IDs:
gid_t *
read_all_groups (void)
{
int ngroups = getgroups (0, NULL);
gid_t *groups
= (gid_t *) xmalloc (ngroups * sizeof (gid_t));
int val = getgroups (ngroups, groups);
if (val < 0)
{
free (groups);
return NULL;
}
return groups;
}
```
getgroups(0, NULL) is used to get the count of groups so that the
correct count can be used to allocate a list of gid_t. This small changes makes this
possible.
equivalent example in Zig after the change:
```zig
// get the group count
const ngroups: usize = std.os.linux.getgroups(0, null);
if (ngroups <= 0) {
return error.GetGroupsError;
}
std.debug.print("number of groups: {d}\n", .{ngroups});
const groups_gids: []u32 = try alloc.alloc(u32, ngroups);
// populate an array of gid_t
_ = std.os.linux.getgroups(ngroups, @ptrCast(groups_gids));
```
Diffstat (limited to 'src/InternPool.zig')
0 files changed, 0 insertions, 0 deletions
