No malloc in memfs read operation.
authorPekka Riikonen <priikone@silcnet.org>
Thu, 15 Feb 2007 07:28:12 +0000 (07:28 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 15 Feb 2007 07:28:12 +0000 (07:28 +0000)
lib/silcsftp/sftp_fs_memory.c

index e502931a362ebc64963bb261ef4416bf9a3b7f68..87e3a863cfef931e29710b6280cd52761ddfa6d0 100644 (file)
@@ -619,18 +619,20 @@ void mem_read(void *context, SilcSFTP sftp,
              void *callback_context)
 {
   MemFSFileHandle h = (MemFSFileHandle)handle;
-  unsigned char *data;
+  unsigned char *data[32768];
   int ret;
 
   if (len > 32768)
     len = 32768;
 
-  data = silc_malloc(len);
-  if (!data) {
-    (*callback)(sftp, SILC_SFTP_STATUS_EOF, NULL, 0, callback_context);
+  ret = lseek(h->fd, (off_t)offset, SEEK_SET);
+  if (ret < 0) {
+    if (!ret)
+      (*callback)(sftp, SILC_SFTP_STATUS_EOF, NULL, 0, callback_context);
+    else
+      (*callback)(sftp, silc_sftp_map_errno(errno), NULL, 0, callback_context);
     return;
   }
-  lseek(h->fd, (off_t)offset, SEEK_SET);
 
   /* Attempt to read */
   ret = silc_file_read(h->fd, data, len);
@@ -639,15 +641,12 @@ void mem_read(void *context, SilcSFTP sftp,
       (*callback)(sftp, SILC_SFTP_STATUS_EOF, NULL, 0, callback_context);
     else
       (*callback)(sftp, silc_sftp_map_errno(errno), NULL, 0, callback_context);
-    silc_free(data);
     return;
   }
 
   /* Return data */
   (*callback)(sftp, SILC_SFTP_STATUS_OK, (const unsigned char *)data,
              ret, callback_context);
-
-  silc_free(data);
 }
 
 void mem_write(void *context, SilcSFTP sftp,