Browse Source

Fix redox socket inner_get_name

Jeremy Soller 4 năm trước cách đây
mục cha
commit
06429ccc4c
1 tập tin đã thay đổi với 8 bổ sung12 xóa
  1. 8 12
      src/platform/redox/socket.rs

+ 8 - 12
src/platform/redox/socket.rs

@@ -132,23 +132,19 @@ unsafe fn inner_get_name(
     address: *mut sockaddr,
     address_len: *mut socklen_t,
 ) -> Result<usize> {
-    // 32 should probably be large enough.
     // Format: [udp|tcp:]remote/local, chan:path
-    let mut buf = [0; 32];
+    let mut buf = [0; 256];
     let len = syscall::fpath(socket as usize, &mut buf)?;
     let buf = &buf[..len];
-    assert!(&buf[..4] == b"tcp:" || &buf[..4] == b"udp:" || &buf[..5] == b"chan:");
 
-    match &buf[..5] {
-        b"tcp:" | b"udp:" => {
-            inner_af_inet(local, &buf[4..], address, address_len);
-        }
-        b"chan:" => {
-            inner_af_unix(&buf[5..], address, address_len);
-        }
+    if buf.starts_with(b"tcp:") || buf.starts_with(b"udp:") {
+        inner_af_inet(local, &buf[4..], address, address_len);
+    } else if buf.starts_with(b"chan:") {
+        inner_af_unix(&buf[5..], address, address_len);
+    } else {
         // Socket doesn't belong to any scheme
-        _ => panic!("socket doesn't match either tcp, udp or chan schemes"),
-    };
+        panic!("socket {:?} doesn't match either tcp, udp or chan schemes", str::from_utf8(buf));
+    }
 
     Ok(0)
 }