summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/config.in40
-rw-r--r--src/fileio.c35
3 files changed, 54 insertions, 28 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8befb78f91f..6673a25f74f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,12 @@
2011-02-22 Paul Eggert <eggert@cs.ucla.edu>
+ Work around some portability problems with symlinks.
+ * fileio.c (Frename_file, Fmake_symbolic_link, Ffile_symlink_p):
+ Simplify the code by assuming that the readlink and symlink calls
+ exist, even if they always fail on this host.
+ (Ffile_readable_p): Likewise, for fifos.
+ * config.in: Regenerate.
+
* dired.c (Ffile_attributes): Simplify and avoid #ifdef.
2011-02-22 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
diff --git a/src/config.in b/src/config.in
index ded8c6b292a..2a2a71659f5 100644
--- a/src/config.in
+++ b/src/config.in
@@ -72,6 +72,19 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Enable expensive run-time checking of data types? */
#undef ENABLE_CHECKING
+/* Define on systems for which file names may have a so-called `drive letter'
+ prefix, define this to compute the length of that prefix, including the
+ colon. */
+#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
+
+/* Define if the backslash character may also serve as a file name component
+ separator. */
+#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+
+/* Define if a drive letter prefix denotes a relative path if it is not
+ followed by a file name component separator. */
+#undef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+
/* Define this to check for errors in cons list. */
#undef GC_CHECK_CONS_LIST
@@ -576,6 +589,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the `random' function. */
#undef HAVE_RANDOM
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
/* Define to 1 if you have the `recvfrom' function. */
#undef HAVE_RECVFROM
@@ -696,6 +712,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define if struct stat has an st_dm_mode member. */
#undef HAVE_ST_DM_MODE
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
/* Define to 1 if you have the `sync' function. */
#undef HAVE_SYNC
@@ -888,6 +907,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to support using a Hesiod database to find the POP server. */
#undef HESIOD
+#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#else
+# define ISSLASH(C) ((C) == '/')
+#endif
+
/* Define to support Kerberos-authenticated POP mail retrieval. */
#undef KERBEROS
@@ -897,6 +922,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if localtime caches TZ. */
#undef LOCALTIME_CACHE
+/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
+ slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
/* String giving fallback POP mail host. */
#undef MAILHOST
@@ -968,10 +997,21 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
'ptrdiff_t'. */
#undef PTRDIFF_T_SUFFIX
+/* Define to 1 if readlink fails to recognize a trailing slash. */
+#undef READLINK_TRAILING_SLASH_BUG
+
/* Define REL_ALLOC if you want to use the relocating allocator for buffer
space. */
#undef REL_ALLOC
+/* Define to 1 if stat needs help when passed a directory name with a trailing
+ slash */
+#undef REPLACE_FUNC_STAT_DIR
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+ slash */
+#undef REPLACE_FUNC_STAT_FILE
+
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
diff --git a/src/fileio.c b/src/fileio.c
index 0225e0bf3a9..26006d63052 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2178,14 +2178,11 @@ This is what happens in interactive use with M-x. */)
if (errno == EXDEV)
{
int count;
-#ifdef S_IFLNK
symlink_target = Ffile_symlink_p (file);
if (! NILP (symlink_target))
Fmake_symbolic_link (symlink_target, newname,
NILP (ok_if_already_exists) ? Qnil : Qt);
- else
-#endif
- if (!NILP (Ffile_directory_p (file)))
+ else if (!NILP (Ffile_directory_p (file)))
call4 (Qcopy_directory, file, newname, Qt, Qnil);
else
/* We have already prompted if it was an integer, so don't
@@ -2197,11 +2194,7 @@ This is what happens in interactive use with M-x. */)
count = SPECPDL_INDEX ();
specbind (Qdelete_by_moving_to_trash, Qnil);
- if (!NILP (Ffile_directory_p (file))
-#ifdef S_IFLNK
- && NILP (symlink_target)
-#endif
- )
+ if (!NILP (Ffile_directory_p (file)) && NILP (symlink_target))
call2 (Qdelete_directory, file, Qt);
else
Fdelete_file (file, Qnil);
@@ -2311,7 +2304,6 @@ This happens for interactive use with M-x. */)
RETURN_UNGCPRO (call4 (handler, Qmake_symbolic_link, filename,
linkname, ok_if_already_exists));
-#ifdef S_IFLNK
encoded_filename = ENCODE_FILE (filename);
encoded_linkname = ENCODE_FILE (linkname);
@@ -2338,12 +2330,6 @@ This happens for interactive use with M-x. */)
}
UNGCPRO;
return Qnil;
-
-#else
- UNGCPRO;
- xsignal1 (Qfile_error, build_string ("Symbolic links are not supported"));
-
-#endif /* S_IFLNK */
}
@@ -2482,7 +2468,7 @@ See also `file-exists-p' and `file-attributes'. */)
return Qnil;
#else /* not DOS_NT and not macintosh */
flags = O_RDONLY;
-#if defined (S_IFIFO) && defined (O_NONBLOCK)
+#ifdef O_NONBLOCK
/* Opening a fifo without O_NONBLOCK can wait.
We don't want to wait. But we don't want to mess wth O_NONBLOCK
except in the case of a fifo, on a system which handles it. */
@@ -2584,6 +2570,10 @@ points to a nonexistent file. */)
(Lisp_Object filename)
{
Lisp_Object handler;
+ char *buf;
+ int bufsize;
+ int valsize;
+ Lisp_Object val;
CHECK_STRING (filename);
filename = Fexpand_file_name (filename, Qnil);
@@ -2594,13 +2584,6 @@ points to a nonexistent file. */)
if (!NILP (handler))
return call2 (handler, Qfile_symlink_p, filename);
-#ifdef S_IFLNK
- {
- char *buf;
- int bufsize;
- int valsize;
- Lisp_Object val;
-
filename = ENCODE_FILE (filename);
bufsize = 50;
@@ -2635,10 +2618,6 @@ points to a nonexistent file. */)
xfree (buf);
val = DECODE_FILE (val);
return val;
- }
-#else /* not S_IFLNK */
- return Qnil;
-#endif /* not S_IFLNK */
}
DEFUN ("file-directory-p", Ffile_directory_p, Sfile_directory_p, 1, 1, 0,