Reconcile various versions of file-copying primitives.
authorChris Hanson <org/chris-hanson/cph>
Mon, 6 Nov 1995 21:52:33 +0000 (21:52 +0000)
committerChris Hanson <org/chris-hanson/cph>
Mon, 6 Nov 1995 21:52:33 +0000 (21:52 +0000)
v7/src/microcode/dosfs.c
v7/src/microcode/os2fs.c
v7/src/microcode/pros2fs.c
v7/src/microcode/prosfs.c
v7/src/microcode/uxfs.c

index 1605ee64ffbe9a48befd4fae3194d8e6aeeb7d71..78110b0ae3d02a1c221863a25c2fe5b600b970c1 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Id: dosfs.c,v 1.4 1992/10/21 00:27:11 jinx Exp $
+$Id: dosfs.c,v 1.5 1995/11/06 21:51:03 cph Exp $
 
-Copyright (c) 1992 Massachusetts Institute of Technology
+Copyright (c) 1992-95 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -117,6 +117,30 @@ DEFUN (OS_file_rename, (from_name, to_name),
     error_system_call (errno, syscall_rename);
 }
 
+void
+DEFUN (OS_file_copy, (from_name, to_name),
+       CONST char * from_name AND
+       CONST char * to_name)
+{
+  int result;
+  Tchannel source_channel = (OS_open_input_file (from_name));
+  Tchannel destination_channel = (OS_open_output_file (to_name));
+  off_t source_length = (OS_file_length (source_channel));
+
+  result = (OS_channel_copy (source_length,
+                            source_channel,
+                            destination_channel));
+  
+  OS_channel_close (source_channel);
+  OS_channel_close (destination_channel);
+
+  if (result < 0)
+  {
+    signal_error_from_primitive (ERR_IO_ERROR);
+  }
+  return;
+}
+
 void
 DEFUN (OS_directory_make, (name), CONST char * name)
 {
index 1c333c770a8749ced3e5312e5fb6e76fdbb05fb0..f24b671e5af709e99ad85923d52c5956ae2b0d58 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: os2fs.c,v 1.6 1995/10/23 06:16:20 cph Exp $
+$Id: os2fs.c,v 1.7 1995/11/06 21:51:37 cph Exp $
 
 Copyright (c) 1994-95 Massachusetts Institute of Technology
 
@@ -225,6 +225,18 @@ OS_file_link_soft (const char * from_name, const char * to_name)
   OS2_error_unimplemented_primitive ();
 }
 
+void
+OS_file_copy (const char * from, const char * to)
+{
+  FILESTATUS3 * info = (OS2_read_file_status (to));
+  if ((info != 0) && (((info -> attrFile) & FILE_READONLY) != 0))
+    {
+      (info -> attrFile) &=~ FILE_READONLY;
+      OS2_write_file_status (to, info);
+    }
+  STD_API_CALL (dos_copy, (((PSZ) from), ((PSZ) to), DCPY_EXISTING));
+}
+
 void
 OS_directory_make (const char * directory_name)
 {
index 5c5f005c16c766413b0d6b77b9a18fdc427bcb1e..4c7055d2dc7a5d3829c6367c69b0cc1290b63ff7 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: pros2fs.c,v 1.14 1995/11/06 21:50:55 cph Exp $
+$Id: pros2fs.c,v 1.15 1995/11/06 21:52:24 cph Exp $
 
 Copyright (c) 1994-95 Massachusetts Institute of Technology
 
@@ -42,6 +42,7 @@ extern void OS2_write_file_status (const char *, FILESTATUS3 *);
 extern char * OS2_drive_type (char);
 extern long OS2_timezone (void);
 extern long OS2_daylight_savings_p (void);
+extern void EXFUN (OS_file_copy, (CONST char *, CONST char *));
 
 #ifndef FILE_TOUCH_OPEN_TRIES
 #define FILE_TOUCH_OPEN_TRIES 5
index 8bb7b8309af68a24e82b4be6161e05a7e1d603a7..6e8830759192cc94ac08986c15c249fc152d910c 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: prosfs.c,v 1.11 1992/10/21 00:27:22 jinx Exp $
+$Id: prosfs.c,v 1.12 1995/11/06 21:52:33 cph Exp $
 
 Copyright (c) 1987-1992 Massachusetts Institute of Technology
 
@@ -47,6 +47,7 @@ extern int EXFUN (OS_channel_copy,
                  (off_t source_length,
                   Tchannel source_channel,
                   Tchannel destination_channel));
+extern void EXFUN (OS_file_copy, (CONST char *, CONST char *));
 
 #define STRING_RESULT(expression)                                      \
 {                                                                      \
@@ -201,30 +202,6 @@ DEFUN (OS_channel_copy, (source_length, source_channel, destination_channel),
   return (0);
 }  
 
-void
-DEFUN (OS_file_copy, (from_name, to_name),
-       CONST char * from_name AND
-       CONST char * to_name)
-{
-  int result;
-  Tchannel source_channel = (OS_open_input_file (from_name));
-  Tchannel destination_channel = (OS_open_output_file (to_name));
-  off_t source_length = (OS_file_length (source_channel));
-
-  result = (OS_channel_copy (source_length,
-                            source_channel,
-                            destination_channel));
-  
-  OS_channel_close (source_channel);
-  OS_channel_close (destination_channel);
-
-  if (result < 0)
-  {
-    signal_error_from_primitive (ERR_IO_ERROR);
-  }
-  return;
-}
-
 DEFINE_PRIMITIVE ("FILE-COPY", Prim_file_copy, 2, 2,
   "Make a new copy of the file FROM-NAME, called TO-NAME.")
 {
index 160e28140e63bbd0e9cd8c8f2956513c71e8b0ee..002481d0e5171dbc3d26b408278f1bdbe0f4020d 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Id: uxfs.c,v 1.9 1992/10/21 00:26:46 jinx Exp $
+$Id: uxfs.c,v 1.10 1995/11/06 21:51:12 cph Exp $
 
-Copyright (c) 1990-1992 Massachusetts Institute of Technology
+Copyright (c) 1990-95 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -120,7 +120,7 @@ DEFUN (OS_file_soft_link_p, (name), CONST char * name)
   return (0);
 #endif
 }
-\f
+
 int
 DEFUN (OS_file_access, (name, mode), CONST char * name AND unsigned int mode)
 {
@@ -145,7 +145,7 @@ DEFUN (OS_file_remove_link, (name), CONST char * name)
          ))
     UX_unlink (name);
 }
-
+\f
 void
 DEFUN (OS_file_link_hard, (from_name, to_name),
        CONST char * from_name AND
@@ -174,6 +174,30 @@ DEFUN (OS_file_rename, (from_name, to_name),
   STD_VOID_SYSTEM_CALL (syscall_rename, (UX_rename (from_name, to_name)));
 }
 
+void
+DEFUN (OS_file_copy, (from_name, to_name),
+       CONST char * from_name AND
+       CONST char * to_name)
+{
+  int result;
+  Tchannel source_channel = (OS_open_input_file (from_name));
+  Tchannel destination_channel = (OS_open_output_file (to_name));
+  off_t source_length = (OS_file_length (source_channel));
+
+  result = (OS_channel_copy (source_length,
+                            source_channel,
+                            destination_channel));
+  
+  OS_channel_close (source_channel);
+  OS_channel_close (destination_channel);
+
+  if (result < 0)
+  {
+    signal_error_from_primitive (ERR_IO_ERROR);
+  }
+  return;
+}
+
 void
 DEFUN (OS_directory_make, (name), CONST char * name)
 {