#ifdef FILE_CODING
#include "mule/file-coding.h"
#endif
+#include "ent/ent.h"
#ifdef HAVE_LIBGEN_H /* Must come before sysfile.h */
#include <libgen.h>
Return nil if FILENAME does not include a directory.
Otherwise return a directory spec.
Given a Unix syntax file name, returns a string ending in slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+Samples:
+filename file-name-directory file-name-nondirectory
+"/usr/lib" "/usr/" "lib"
+"/usr/lib/" "/usr/lib/" ""
+"/usr/" "/usr/" ""
+"/usr" "/" "usr"
+"usr" nil "usr"
+"/" "/" ""
+"." nil "."
+"./" "./" ""
+".." nil ".."
+
*/
(filename))
{
For example, in a Unix-syntax file name,
this is everything after the last slash,
or the entire name if it contains no slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+It is equivalent to the GNU version of basename.
+
+Samples:
+filename file-name-directory file-name-nondirectory
+"/usr/lib" "/usr/" "lib"
+"/usr/lib/" "/usr/lib/" ""
+"/usr/" "/usr/" ""
+"/usr" "/" "usr"
+"usr" nil "usr"
+"/" "/" ""
+"." nil "."
+"./" "./" ""
+".." nil ".."
+
*/
(filename))
{
file_name_as_directory((char *)target, (char *)newdir, tlen);
}
- xstrncat((char *)target, (char *)nm, tlen);
+ xstrncat((char *)target, (char *)nm, tlen-1);
/* ASSERT (IS_DIRECTORY_SEP (target[0])) if not VMS */
O_RDONLY | OPEN_BINARY, 0);
if (ifd < 0) {
report_file_error("Opening input file", list1(filename));
- return;
+ goto end;
}
record_unwind_protect(close_file_unwind, make_int(ifd));
unbind_to(speccount, Qnil);
}
+end:
UNGCPRO;
return Qnil;
}