diff --git a/src/modules/files/file.c b/src/modules/files/file.c
index d025a859cdfd1bf103dbb42788439f51db62e56f..d5bef66d8eaa3b9b6327aa7c590c2db4de34a877 100644
--- a/src/modules/files/file.c
+++ b/src/modules/files/file.c
@@ -305,8 +305,7 @@ static void file_write_callback(int fd, void *data)
 
 static void file_write(INT32 args)
 {
-  INT32 written;
-  char *out;
+  INT32 written,i;
 
   if(args<1 || sp[-args].type != T_STRING)
     error("Bad argument 1 to file->write().\n");
@@ -317,7 +316,7 @@ static void file_write(INT32 args)
   written=0;
   while(written < sp[-args].u.string->len)
   {
-    i=write(FD, sp[-args].u.string->str, sp[-args].u.string->len);
+    i=write(FD, sp[-args].u.string->str + written, sp[-args].u.string->len - written);
 
     if(i<0)
     {
@@ -345,7 +344,7 @@ static void file_write(INT32 args)
   THIS->errno=0;
 
   pop_n_elems(args);
-  push_int(i);
+  push_int(written);
 }
 
 static void do_close(int fd, int flags)