]> git.eshelyaron.com Git - emacs.git/commitdiff
(Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
authorKenichi Handa <handa@m17n.org>
Fri, 26 May 2006 04:48:21 +0000 (04:48 +0000)
committerKenichi Handa <handa@m17n.org>
Fri, 26 May 2006 04:48:21 +0000 (04:48 +0000)
src/coding.c

index 478e119c003aa13b96beb7b61cf4b45e33a7728f..5ef412a3619e66afab17104233f294ea49d1c053 100644 (file)
@@ -7457,7 +7457,7 @@ is selected as the TARGET.  For example, if OPERATION does file I/O,
 whichever argument specifies the file name is TARGET.
 
 TARGET has a meaning which depends on OPERATION:
-  For file I/O, TARGET is a file name.
+  For file I/O, TARGET is a file name (except for the special case below).
   For process I/O, TARGET is a process name.
   For network I/O, TARGET is a service name or a port number
 
@@ -7469,6 +7469,12 @@ or a function symbol to call.
 In the last case, we call the function with one argument,
 which is a list of all the arguments given to this function.
 
+If OPERATION is `insert-file-contents', the argument corresponding to
+TARGET may be a cons (FILENAME . BUFFER).  In that case, FILENAME is a
+file name to look up, and BUFFER is a buffer that already contains the
+file (but not yet decoded).  If a function is found as above, the
+function must pay attention to this format of TARGET.
+
 usage: (find-operation-coding-system OPERATION ARGUMENTS ...)  */)
      (nargs, args)
      int nargs;
@@ -7495,8 +7501,12 @@ usage: (find-operation-coding-system OPERATION ARGUMENTS ...)  */)
     target_idx = make_number (4);
   target = args[XINT (target_idx) + 1];
   if (!(STRINGP (target)
+       || (EQ (operation, Qinsert_file_contents) && CONSP (target)
+           && STRINGP (XCAR (target)) && BUFFERP (XCDR (target)))
        || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
     error ("Invalid argument %d", XINT (target_idx) + 1);
+  if (CONSP (target))
+    target = XCAR (target);
 
   chain = ((EQ (operation, Qinsert_file_contents)
            || EQ (operation, Qwrite_region))