[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] LostIO: Überflüssiges malloc entfernen



Toni Kaufmann schrieb:
Kevin Wolf wrote:
Dieser Patch entsetzt ein überflüssiges malloc durch ein lokales Array.
Das stimmt so durchaus. ;-) Aber ist da nicht auch noch ein
überflüssiges in io_write wenn wir schon grad dabei sind?

Hmpf, jetzt ist er halt nicht mehr so schön trivial. ;-)
Index: src/modules/lib/stdlibc/file.c
===================================================================
--- src/modules/lib/stdlibc/file.c	(Revision 583)
+++ src/modules/lib/stdlibc/file.c	(Arbeitskopie)
@@ -121,7 +121,7 @@
     char* full_path = io_get_absolute_path(filename);
 
     //RPC-Daten zusammenstellen
-    char* msg = malloc(strlen(full_path) + 2);
+    char msg[strlen(full_path) + 2];
     byte* attr = (byte*) msg;
     
     //Attribute aus dem mode-String parsen
@@ -163,9 +163,6 @@
     //weren.
     free(full_path);
 
-
-    free(msg);
-    
     FILE* io_res = (io_resource_t*) resp->data;
     //Wenn ein Fehler beim oeffnen aufgetreten ist, wird NULL zurueck gegeben.
     if ((io_res == NULL) || (io_res->pid == 0) || (resp->data_length == 0)) {
@@ -408,19 +405,19 @@
 static size_t io_write(const void* src, size_t blocksize, size_t blockcount,
     FILE* io_res)
 {   
-    io_write_request_t* write_request = (io_write_request_t*) malloc(blocksize
-        * blockcount + sizeof(io_write_request_t));
+    size_t data_size = blockcount * blocksize;
+    uint8_t request[sizeof(io_write_request_t) + data_size];
 
+    io_write_request_t* write_request = (io_write_request_t*) request;    
     write_request->id = io_res->id;
     write_request->blocksize = blocksize;
     write_request->blockcount = blockcount;
     
-    memcpy((write_request->data), src, blocksize * blockcount);
+    memcpy(write_request->data, src, data_size);
     
     
-    size_t resp = rpc_get_dword(io_res->pid, "IO_WRITE", blocksize 
-        * blockcount + sizeof(io_write_request_t), (char*) write_request);
-    free(write_request);
+    size_t resp = rpc_get_dword(io_res->pid, "IO_WRITE", 
+        sizeof(io_write_request_t) + data_size, (char*) request);
 
     return resp;
 }