Einigen Code verlegt nach files.c

Change-Id: Ic1128e9c0995a16d81c21348891d735559548630
diff --git a/secure/simul_efun/files.c b/secure/simul_efun/files.c
index 291bef6..d2b81a5 100644
--- a/secure/simul_efun/files.c
+++ b/secure/simul_efun/files.c
@@ -43,3 +43,64 @@
     return funcall(bind_lambda(#'efun::write_file, previous_object()),
                    file, str, flags);
 }
+
+// * Bei 50k Groesse Log-File rotieren
+varargs int log_file(string file, string txt, int size_to_break)
+{
+    mixed *st;
+
+    file="/log/"+file;
+    file=implode((efun::explode(file,"/")-({".."})),"/");
+
+    if (!funcall(bind_lambda(#'efun::call_other,PO),"secure/master",//')
+                "valid_write",file,geteuid(PO),"log_file",PO))
+      return 0;
+    if ( size_to_break >= 0 & (
+        sizeof(st = get_dir(file,2) ) && st[0] >= (size_to_break|MAX_LOG_SIZE)))
+        catch(rename(file, file + ".old");publish); /* No panic if failure */
+
+    return(write_file(file,txt));
+}
+
+#if !__EFUN_DEFINED__(copy_file)
+#define MAXLEN 50000
+public nomask int copy_file(string source, string dest)
+{
+
+    int ptr;
+    string bytes;
+
+    set_this_object(previous_object());
+    if (!sizeof(source)||!sizeof(dest)||source==dest||(file_size(source)==-1)||
+        (!call_other(master(),"valid_read",source,
+                     getuid(this_interactive()||
+                   previous_object()),"read_file",previous_object()))||
+        (!call_other(master(),"valid_read",source,
+                     getuid(this_interactive()||
+                   previous_object()),"write_file",previous_object())))
+      return 1;
+    switch (file_size(dest))
+    {
+    case -1:
+      break;
+    case -2:
+      if (dest[<1]!='/') dest+="/";
+      dest+=efun::explode(source,"/")[<1];
+      if (file_size(dest)==-2) return 1;
+      if (file_size(dest)!=-1) break;
+    default:
+      if (!rm(dest)) return 1;
+      break;
+    }
+    do
+    {
+      bytes = read_bytes(source, ptr, MAXLEN); ptr += MAXLEN;
+      if (!bytes) bytes="";
+      write_file(dest, bytes);
+    }
+    while(sizeof(bytes) == MAXLEN);
+    return 0;
+}
+#endif //!__EFUN_DEFINED__(copy_file)
+
+