bugfixes with array.alloc_one
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 18 Jan 2022 04:49:46 +0000 (22:49 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 18 Jan 2022 04:49:46 +0000 (22:49 -0600)
core/container/array.onyx
core/net/net.onyx

index 33627f0d9ca7137677505631541078d96eea75b8..adad898989928a89a695186edb2154911876d5e2 100644 (file)
@@ -71,7 +71,7 @@ ensure_capacity :: (arr: ^[..] $T, capacity: u32) -> bool {
 alloc_one :: (arr: ^[..] $T) -> ^T {
     if !ensure_capacity(arr, arr.count + 1) do return null;
     arr.count += 1;
-    return ^arr.data[arr.count];
+    return ^arr.data[arr.count - 1];
 }
 
 push :: (arr: ^[..] $T, x: T) -> bool {
index 2610f927a5ba0873c54864aa99ef33b3f8308a68..a214d19b6e8d712518aaf5e9c0a834ea0177856d 100644 (file)
@@ -108,6 +108,7 @@ socket_sendall :: (s: ^Socket, data: [] u8) {
 socket_recv :: (s: ^Socket, maxlen := 1024, allocator := context.allocator) -> [] u8 {
     buffer := alloc.from_stack(maxlen);
     received := __net_recv(s.handle, .{ buffer, maxlen });
+    if received < 0 { s.vtable = null; return .[]; }
 
     result := memory.make_slice(u8, received, allocator=allocator);
     memory.copy(result.data, buffer, received);
@@ -116,7 +117,9 @@ socket_recv :: (s: ^Socket, maxlen := 1024, allocator := context.allocator) -> [
 }
 
 socket_recv_into :: (s: ^Socket, buffer: [] u8) -> i32 {
-    return __net_recv(s.handle, buffer);
+    received := __net_recv(s.handle, buffer);
+    if received < 0 { s.vtable = null; }
+    return received;
 }
 
 #local __net_socket_vtable := io.Stream_Vtable.{
@@ -124,13 +127,15 @@ socket_recv_into :: (s: ^Socket, buffer: [] u8) -> i32 {
         if handle == 0 do return .BadFile, 0;
         
         bytes_read := __net_recv(handle, buffer);
+        if bytes_read < 0 { s.vtable = null; }
         return .None, bytes_read;
     },
 
-    write = (use p: ^Socket, buffer: [] u8) -> (io.Error, u32) {
+    write = (use s: ^Socket, buffer: [] u8) -> (io.Error, u32) {
         if handle == 0 do return .BadFile, 0;
         
         bytes_written := __net_send(handle, buffer);
+        if bytes_written < 0 { s.vtable = null; }
         return .None, bytes_written;
     },