Skip to content

Commit a1db18c

Browse files
Fix calls to retry_with_buffer when big buffer is necessary (#14622)
Co-authored-by: Johannes Müller <[email protected]>
1 parent feb612b commit a1db18c

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

src/crystal/system/unix/group.cr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ module Crystal::System::Group
1212
groupname.check_no_null_byte
1313

1414
grp = uninitialized LibC::Group
15-
grp_pointer = pointerof(grp)
15+
grp_pointer = Pointer(LibC::Group).null
1616
System.retry_with_buffer("getgrnam_r", GETGR_R_SIZE_MAX) do |buf|
17-
LibC.getgrnam_r(groupname, grp_pointer, buf, buf.size, pointerof(grp_pointer)).tap do
17+
LibC.getgrnam_r(groupname, pointerof(grp), buf, buf.size, pointerof(grp_pointer)).tap do
1818
# It's not necessary to check success with `ret == 0` because `grp_pointer` will be NULL on failure
1919
return from_struct(grp) if grp_pointer
2020
end
@@ -26,9 +26,9 @@ module Crystal::System::Group
2626
return unless groupid
2727

2828
grp = uninitialized LibC::Group
29-
grp_pointer = pointerof(grp)
29+
grp_pointer = Pointer(LibC::Group).null
3030
System.retry_with_buffer("getgrgid_r", GETGR_R_SIZE_MAX) do |buf|
31-
LibC.getgrgid_r(groupid, grp_pointer, buf, buf.size, pointerof(grp_pointer)).tap do
31+
LibC.getgrgid_r(groupid, pointerof(grp), buf, buf.size, pointerof(grp_pointer)).tap do
3232
# It's not necessary to check success with `ret == 0` because `grp_pointer` will be NULL on failure
3333
return from_struct(grp) if grp_pointer
3434
end

src/crystal/system/unix/path.cr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ module Crystal::System::Path
88
id = LibC.getuid
99

1010
pwd = uninitialized LibC::Passwd
11-
pwd_pointer = pointerof(pwd)
12-
ret = nil
11+
pwd_pointer = Pointer(LibC::Passwd).null
12+
ret = LibC::Int.new(0)
1313
System.retry_with_buffer("getpwuid_r", User::GETPW_R_SIZE_MAX) do |buf|
14-
ret = LibC.getpwuid_r(id, pwd_pointer, buf, buf.size, pointerof(pwd_pointer)).tap do
14+
ret = LibC.getpwuid_r(id, pointerof(pwd), buf, buf.size, pointerof(pwd_pointer)).tap do
1515
# It's not necessary to check success with `ret == 0` because `pwd_pointer` will be NULL on failure
1616
return String.new(pwd.pw_dir) if pwd_pointer
1717
end
1818
end
1919

20-
raise RuntimeError.from_os_error("getpwuid_r", Errno.new(ret.not_nil!))
20+
raise RuntimeError.from_os_error("getpwuid_r", Errno.new(ret))
2121
end
2222
end
2323
end

src/crystal/system/unix/user.cr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ module Crystal::System::User
1515
username.check_no_null_byte
1616

1717
pwd = uninitialized LibC::Passwd
18-
pwd_pointer = pointerof(pwd)
18+
pwd_pointer = Pointer(LibC::Passwd).null
1919
System.retry_with_buffer("getpwnam_r", GETPW_R_SIZE_MAX) do |buf|
20-
LibC.getpwnam_r(username, pwd_pointer, buf, buf.size, pointerof(pwd_pointer)).tap do
20+
LibC.getpwnam_r(username, pointerof(pwd), buf, buf.size, pointerof(pwd_pointer)).tap do
2121
# It's not necessary to check success with `ret == 0` because `pwd_pointer` will be NULL on failure
2222
return from_struct(pwd) if pwd_pointer
2323
end
@@ -29,9 +29,9 @@ module Crystal::System::User
2929
return unless id
3030

3131
pwd = uninitialized LibC::Passwd
32-
pwd_pointer = pointerof(pwd)
32+
pwd_pointer = Pointer(LibC::Passwd).null
3333
System.retry_with_buffer("getpwuid_r", GETPW_R_SIZE_MAX) do |buf|
34-
LibC.getpwuid_r(id, pwd_pointer, buf, buf.size, pointerof(pwd_pointer)).tap do
34+
LibC.getpwuid_r(id, pointerof(pwd), buf, buf.size, pointerof(pwd_pointer)).tap do
3535
# It's not necessary to check success with `ret == 0` because `pwd_pointer` will be NULL on failure
3636
return from_struct(pwd) if pwd_pointer
3737
end

0 commit comments

Comments
 (0)