X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/6ccc848cd85e75d77d6b11a46f5f23f860db9ff5..2bfa3d3e1fb347ba76bddf77f3e288049635821d:/src/cygw32.c diff --git a/src/cygw32.c b/src/cygw32.c index 54f2076a89..9808cc6f88 100644 --- a/src/cygw32.c +++ b/src/cygw32.c @@ -1,5 +1,5 @@ /* Cygwin support routines. - Copyright (C) 2011-2012 Free Software Foundation, Inc. + Copyright (C) 2011-2014 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -23,24 +23,23 @@ along with GNU Emacs. If not, see . */ #include #include -static Lisp_Object -fchdir_unwind (Lisp_Object dir_fd) +static void +fchdir_unwind (int dir_fd) { - (void) fchdir (XFASTINT (dir_fd)); - (void) close (XFASTINT (dir_fd)); - return Qnil; + (void) fchdir (dir_fd); + (void) close (dir_fd); } static void chdir_to_default_directory () { Lisp_Object new_cwd; - int old_cwd_fd = open (".", O_RDONLY | O_DIRECTORY); + int old_cwd_fd = emacs_open (".", O_RDONLY | O_DIRECTORY, 0); if (old_cwd_fd == -1) error ("could not open current directory: %s", strerror (errno)); - record_unwind_protect (fchdir_unwind, make_number (old_cwd_fd)); + record_unwind_protect_int (fchdir_unwind, old_cwd_fd); new_cwd = Funhandled_file_name_directory ( Fexpand_file_name (build_string ("."), Qnil)); @@ -57,7 +56,7 @@ conv_filename_to_w32_unicode (Lisp_Object in, int absolute_p) ssize_t converted_len; Lisp_Object converted; unsigned flags; - int count = SPECPDL_INDEX (); + dynwind_begin (); chdir_to_default_directory (); @@ -77,7 +76,8 @@ conv_filename_to_w32_unicode (Lisp_Object in, int absolute_p) SDATA (converted), converted_len)) error ("cygwin_conv_path: %s", strerror (errno)); - return unbind_to (count, converted); + dynwind_end (); + return converted; } static Lisp_Object @@ -86,7 +86,7 @@ conv_filename_from_w32_unicode (const wchar_t* in, int absolute_p) ssize_t converted_len; Lisp_Object converted; unsigned flags; - int count = SPECPDL_INDEX (); + dynwind_begin (); chdir_to_default_directory (); @@ -103,34 +103,39 @@ conv_filename_from_w32_unicode (const wchar_t* in, int absolute_p) if (cygwin_conv_path (flags, in, SDATA (converted), converted_len)) error ("cygwin_conv_path: %s", strerror (errno)); - return unbind_to (count, DECODE_FILE (converted)); + Lisp_Object tem0 = DECODE_FILE (converted); + dynwind_end (); + return tem0; } -DEFUN ("cygwin-convert-path-to-windows", - Fcygwin_convert_path_to_windows, Scygwin_convert_path_to_windows, +DEFUN ("cygwin-convert-file-name-to-windows", + Fcygwin_convert_file_name_to_windows, + Scygwin_convert_file_name_to_windows, 1, 2, 0, - doc: /* Convert PATH to a Windows path. If ABSOLUTE-P if - non-nil, return an absolute path.*/) - (Lisp_Object path, Lisp_Object absolute_p) + doc: /* Convert a Cygwin file name FILE to a Windows-style file name. +If ABSOLUTE-P is non-nil, return an absolute file name. +For the reverse operation, see `cygwin-convert-file-name-from-windows'. */) + (Lisp_Object file, Lisp_Object absolute_p) { return from_unicode ( - conv_filename_to_w32_unicode (path, EQ (absolute_p, Qnil) ? 0 : 1)); + conv_filename_to_w32_unicode (file, EQ (absolute_p, Qnil) ? 0 : 1)); } -DEFUN ("cygwin-convert-path-from-windows", - Fcygwin_convert_path_from_windows, Scygwin_convert_path_from_windows, +DEFUN ("cygwin-convert-file-name-from-windows", + Fcygwin_convert_file_name_from_windows, + Scygwin_convert_file_name_from_windows, 1, 2, 0, - doc: /* Convert a Windows path to a Cygwin path. If ABSOLUTE-P - if non-nil, return an absolute path.*/) - (Lisp_Object path, Lisp_Object absolute_p) + doc: /* Convert a Windows-style file name FILE to a Cygwin file name. +If ABSOLUTE-P is non-nil, return an absolute file name. +For the reverse operation, see `cygwin-convert-file-name-to-windows'. */) + (Lisp_Object file, Lisp_Object absolute_p) { - return conv_filename_from_w32_unicode (to_unicode (path, &path), + return conv_filename_from_w32_unicode (to_unicode (file, &file), EQ (absolute_p, Qnil) ? 0 : 1); } void syms_of_cygw32 (void) { - defsubr (&Scygwin_convert_path_from_windows); - defsubr (&Scygwin_convert_path_to_windows); +#include "cygw32.x" }