diff options
Diffstat (limited to 'src/fileio.c')
| -rw-r--r-- | src/fileio.c | 101 |
1 files changed, 21 insertions, 80 deletions
diff --git a/src/fileio.c b/src/fileio.c index 8dfc9fffacf..debd1f30a4f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -867,11 +867,7 @@ filesystem tree, not (expand-file-name ".." dirname). */) #endif /* not DOS_NT */ ) { - struct gcpro gcpro1; - - GCPRO1 (name); default_directory = Fexpand_file_name (default_directory, Qnil); - UNGCPRO; } } multibyte = STRING_MULTIBYTE (name); @@ -1793,7 +1789,6 @@ barf_or_query_if_file_exists (Lisp_Object absname, bool known_to_exist, { Lisp_Object tem, encoded_filename; struct stat statbuf; - struct gcpro gcpro1; encoded_filename = ENCODE_FILE (absname); @@ -1810,14 +1805,12 @@ barf_or_query_if_file_exists (Lisp_Object absname, bool known_to_exist, if (! interactive) xsignal2 (Qfile_already_exists, build_string ("File already exists"), absname); - GCPRO1 (absname); AUTO_STRING (format, "File %s already exists; %s anyway? "); tem = CALLN (Fformat, format, absname, build_string (querystring)); if (quick) tem = call1 (intern ("y-or-n-p"), tem); else tem = do_yes_or_no_p (tem); - UNGCPRO; if (NILP (tem)) xsignal2 (Qfile_already_exists, build_string ("File already exists"), absname); @@ -1858,7 +1851,6 @@ permissions. */) Lisp_Object preserve_permissions) { Lisp_Object handler; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; ptrdiff_t count = SPECPDL_INDEX (); Lisp_Object encoded_file, encoded_newname; #if HAVE_LIBSELINUX @@ -1875,7 +1867,6 @@ permissions. */) #endif encoded_file = encoded_newname = Qnil; - GCPRO4 (file, newname, encoded_file, encoded_newname); CHECK_STRING (file); CHECK_STRING (newname); @@ -1893,9 +1884,9 @@ permissions. */) if (NILP (handler)) handler = Ffind_file_name_handler (newname, Qcopy_file); if (!NILP (handler)) - RETURN_UNGCPRO (call7 (handler, Qcopy_file, file, newname, - ok_if_already_exists, keep_time, preserve_uid_gid, - preserve_permissions)); + return call7 (handler, Qcopy_file, file, newname, + ok_if_already_exists, keep_time, preserve_uid_gid, + preserve_permissions); encoded_file = ENCODE_FILE (file); encoded_newname = ENCODE_FILE (newname); @@ -2095,7 +2086,6 @@ permissions. */) /* Discard the unwind protects. */ specpdl_ptr = specpdl + count; - UNGCPRO; return Qnil; } @@ -2165,15 +2155,12 @@ With a prefix argument, TRASH is nil. */) { Lisp_Object handler; Lisp_Object encoded_file; - struct gcpro gcpro1; - GCPRO1 (filename); if (!NILP (Ffile_directory_p (filename)) && NILP (Ffile_symlink_p (filename))) xsignal2 (Qfile_error, build_string ("Removing old name: is a directory"), filename); - UNGCPRO; filename = Fexpand_file_name (filename, Qnil); handler = Ffind_file_name_handler (filename, Qdelete_file); @@ -2220,11 +2207,9 @@ This is what happens in interactive use with M-x. */) (Lisp_Object file, Lisp_Object newname, Lisp_Object ok_if_already_exists) { Lisp_Object handler; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; Lisp_Object encoded_file, encoded_newname, symlink_target; symlink_target = encoded_file = encoded_newname = Qnil; - GCPRO5 (file, newname, encoded_file, encoded_newname, symlink_target); CHECK_STRING (file); CHECK_STRING (newname); file = Fexpand_file_name (file, Qnil); @@ -2250,8 +2235,8 @@ This is what happens in interactive use with M-x. */) if (NILP (handler)) handler = Ffind_file_name_handler (newname, Qrename_file); if (!NILP (handler)) - RETURN_UNGCPRO (call4 (handler, Qrename_file, - file, newname, ok_if_already_exists)); + return call4 (handler, Qrename_file, + file, newname, ok_if_already_exists); encoded_file = ENCODE_FILE (file); encoded_newname = ENCODE_FILE (newname); @@ -2297,7 +2282,7 @@ This is what happens in interactive use with M-x. */) else report_file_errno ("Renaming", list2 (file, newname), rename_errno); } - UNGCPRO; + return Qnil; } @@ -2312,9 +2297,7 @@ This is what happens in interactive use with M-x. */) { Lisp_Object handler; Lisp_Object encoded_file, encoded_newname; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - GCPRO4 (file, newname, encoded_file, encoded_newname); encoded_file = encoded_newname = Qnil; CHECK_STRING (file); CHECK_STRING (newname); @@ -2329,15 +2312,15 @@ This is what happens in interactive use with M-x. */) call the corresponding file handler. */ handler = Ffind_file_name_handler (file, Qadd_name_to_file); if (!NILP (handler)) - RETURN_UNGCPRO (call4 (handler, Qadd_name_to_file, file, - newname, ok_if_already_exists)); + return call4 (handler, Qadd_name_to_file, file, + newname, ok_if_already_exists); /* If the new name has special constructs in it, call the corresponding file handler. */ handler = Ffind_file_name_handler (newname, Qadd_name_to_file); if (!NILP (handler)) - RETURN_UNGCPRO (call4 (handler, Qadd_name_to_file, file, - newname, ok_if_already_exists)); + return call4 (handler, Qadd_name_to_file, file, + newname, ok_if_already_exists); encoded_file = ENCODE_FILE (file); encoded_newname = ENCODE_FILE (newname); @@ -2354,7 +2337,6 @@ This is what happens in interactive use with M-x. */) report_file_errno ("Adding new name", list2 (file, newname), link_errno); } - UNGCPRO; return Qnil; } @@ -2370,9 +2352,7 @@ This happens for interactive use with M-x. */) { Lisp_Object handler; Lisp_Object encoded_target, encoded_linkname; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - GCPRO4 (target, linkname, encoded_target, encoded_linkname); encoded_target = encoded_linkname = Qnil; CHECK_STRING (target); CHECK_STRING (linkname); @@ -2391,15 +2371,15 @@ This happens for interactive use with M-x. */) call the corresponding file handler. */ handler = Ffind_file_name_handler (target, Qmake_symbolic_link); if (!NILP (handler)) - RETURN_UNGCPRO (call4 (handler, Qmake_symbolic_link, target, - linkname, ok_if_already_exists)); + return call4 (handler, Qmake_symbolic_link, target, + linkname, ok_if_already_exists); /* If the new link name has special constructs in it, call the corresponding file handler. */ handler = Ffind_file_name_handler (linkname, Qmake_symbolic_link); if (!NILP (handler)) - RETURN_UNGCPRO (call4 (handler, Qmake_symbolic_link, target, - linkname, ok_if_already_exists)); + return call4 (handler, Qmake_symbolic_link, target, + linkname, ok_if_already_exists); encoded_target = ENCODE_FILE (target); encoded_linkname = ENCODE_FILE (linkname); @@ -2417,23 +2397,17 @@ This happens for interactive use with M-x. */) unlink (SSDATA (encoded_linkname)); if (symlink (SSDATA (encoded_target), SSDATA (encoded_linkname)) >= 0) - { - UNGCPRO; - return Qnil; - } + return Qnil; } if (errno == ENOSYS) - { - UNGCPRO; - xsignal1 (Qfile_error, - build_string ("Symbolic links are not supported")); - } + xsignal1 (Qfile_error, + build_string ("Symbolic links are not supported")); symlink_errno = errno; report_file_errno ("Making symbolic link", list2 (target, linkname), symlink_errno); } - UNGCPRO; + return Qnil; } @@ -3185,16 +3159,13 @@ otherwise, if FILE2 does not exist, the answer is t. */) Lisp_Object absname1, absname2; struct stat st1, st2; Lisp_Object handler; - struct gcpro gcpro1, gcpro2; CHECK_STRING (file1); CHECK_STRING (file2); absname1 = Qnil; - GCPRO2 (absname1, file2); absname1 = expand_and_dir_to_file (file1, BVAR (current_buffer, directory)); absname2 = expand_and_dir_to_file (file2, BVAR (current_buffer, directory)); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -3204,10 +3175,8 @@ otherwise, if FILE2 does not exist, the answer is t. */) if (!NILP (handler)) return call3 (handler, Qfile_newer_than_file_p, absname1, absname2); - GCPRO2 (absname1, absname2); absname1 = ENCODE_FILE (absname1); absname2 = ENCODE_FILE (absname2); - UNGCPRO; if (stat (SSDATA (absname1), &st1) < 0) return Qnil; @@ -3410,7 +3379,6 @@ by calling `format-decode', which see. */) off_t beg_offset, end_offset; int unprocessed; ptrdiff_t count = SPECPDL_INDEX (); - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; Lisp_Object handler, val, insval, orig_filename, old_undo; Lisp_Object p; ptrdiff_t total = 0; @@ -3450,8 +3418,6 @@ by calling `format-decode', which see. */) orig_filename = Qnil; old_undo = Qnil; - GCPRO5 (filename, val, p, orig_filename, old_undo); - CHECK_STRING (filename); filename = Fexpand_file_name (filename, Qnil); @@ -3902,7 +3868,6 @@ by calling `format-decode', which see. */) bool multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); Lisp_Object conversion_buffer; - struct gcpro gcpro1; conversion_buffer = code_conversion_save (1, multibyte); @@ -3915,7 +3880,6 @@ by calling `format-decode', which see. */) inserted = 0; /* Bytes put into CONVERSION_BUFFER so far. */ unprocessed = 0; /* Bytes not processed in previous loop. */ - GCPRO1 (conversion_buffer); while (1) { /* Read at most READ_BUF_SIZE bytes at a time, to allow @@ -3939,7 +3903,7 @@ by calling `format-decode', which see. */) if (coding.carryover_bytes > 0) memcpy (read_buf, coding.carryover, unprocessed); } - UNGCPRO; + if (this < 0) report_file_error ("Read error", orig_filename); emacs_close (fd); @@ -4511,7 +4475,7 @@ by calling `format-decode', which see. */) if (NILP (val)) val = list2 (orig_filename, make_number (inserted)); - RETURN_UNGCPRO (unbind_to (count, val)); + return unbind_to (count, val); } static Lisp_Object build_annotations (Lisp_Object, Lisp_Object); @@ -4698,7 +4662,6 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, bool visiting = (EQ (visit, Qt) || STRINGP (visit)); bool quietly = !NILP (visit); bool file_locked = 0; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; struct buffer *given_buffer; struct coding_system coding; @@ -4709,7 +4672,6 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, validate_region (&start, &end); visit_file = Qnil; - GCPRO5 (start, filename, visit, visit_file, lockname); filename = Fexpand_file_name (filename, Qnil); @@ -4745,7 +4707,7 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, XSETFASTINT (BVAR (current_buffer, save_length), Z - BEG); bset_filename (current_buffer, visit_file); } - UNGCPRO; + return val; } @@ -4785,10 +4747,6 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, XSETFASTINT (end, ZV); } - UNGCPRO; - - GCPRO5 (start, filename, annotations, visit_file, lockname); - /* Decide the coding-system to encode the data with. We used to make this choice before calling build_annotations, but that leads to problems when a write-annotate-function takes care of @@ -4825,7 +4783,6 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, int open_errno = errno; if (file_locked) unlock_file (lockname); - UNGCPRO; report_file_errno ("Opening output file", filename, open_errno); } @@ -4841,13 +4798,10 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, int lseek_errno = errno; if (file_locked) unlock_file (lockname); - UNGCPRO; report_file_errno ("Lseek error", filename, lseek_errno); } } - UNGCPRO; - immediate_quit = 1; if (STRINGP (start)) @@ -5046,7 +5000,6 @@ build_annotations (Lisp_Object start, Lisp_Object end) { Lisp_Object annotations; Lisp_Object p, res; - struct gcpro gcpro1, gcpro2; Lisp_Object original_buffer; int i; bool used_global = false; @@ -5055,7 +5008,6 @@ build_annotations (Lisp_Object start, Lisp_Object end) annotations = Qnil; p = Vwrite_region_annotate_functions; - GCPRO2 (annotations, p); while (CONSP (p)) { struct buffer *given_buffer = current_buffer; @@ -5115,7 +5067,6 @@ build_annotations (Lisp_Object start, Lisp_Object end) annotations = merge (annotations, res, Qcar_less_than_car); } - UNGCPRO; return annotations; } @@ -5386,7 +5337,6 @@ auto_save_error (Lisp_Object error_val) { Lisp_Object msg; int i; - struct gcpro gcpro1; auto_save_error_occurred = 1; @@ -5395,7 +5345,6 @@ auto_save_error (Lisp_Object error_val) AUTO_STRING (format, "Auto-saving %s: %s"); msg = CALLN (Fformat, format, BVAR (current_buffer, name), Ferror_message_string (error_val)); - GCPRO1 (msg); for (i = 0; i < 3; ++i) { @@ -5406,7 +5355,6 @@ auto_save_error (Lisp_Object error_val) Fsleep_for (make_number (1), Qnil); } - UNGCPRO; return Qnil; } @@ -5498,7 +5446,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */) bool orig_minibuffer_auto_raise = minibuffer_auto_raise; bool old_message_p = 0; struct auto_save_unwind auto_save_unwind; - struct gcpro gcpro1, gcpro2; if (max_specpdl_size < specpdl_size + 40) max_specpdl_size = specpdl_size + 40; @@ -5517,9 +5464,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */) oquit = Vquit_flag; Vquit_flag = Qnil; - /* No GCPRO needed, because (when it matters) all Lisp_Object variables - point to non-strings reached from Vbuffer_alist. */ - hook = intern ("auto-save-hook"); safe_run_hooks (hook); @@ -5535,14 +5479,11 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */) if (!NILP (Vrun_hooks)) { Lisp_Object dir; - dir = Qnil; - GCPRO2 (dir, listfile); dir = Ffile_name_directory (listfile); if (NILP (Ffile_directory_p (dir))) internal_condition_case_1 (do_auto_save_make_dir, dir, Qt, do_auto_save_eh); - UNGCPRO; } stream = emacs_fopen (SSDATA (listfile), "w"); |
