[librep] added file-executable-p function



commit 17493d41c42a3b5cf7d9b6680ea3d25ca39c14e7
Author: Christopher Roy Bratusek <chris nanolx org>
Date:   Sat Oct 10 12:35:38 2009 +0200

    added file-executable-p function

 ChangeLog          |    9 +++++++++
 man/lang.texi      |    4 ++++
 man/news.texi      |    2 ++
 src/files.c        |   21 +++++++++++++++++++++
 src/librep.sym     |    2 ++
 src/rep_subrs.h    |    1 +
 src/repint.h       |    1 +
 src/repint_subrs.h |    1 +
 src/unix_files.c   |    6 ++++++
 9 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index af4084a..e862fdb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-10-10  Christopher Bratusek <zanghar freenet de>
+	* src/files.c
+	* src/repint.h
+	* src/repint_subrs.h
+	* src/rep_subrs.h: added file-executable-p function
+
+	* man/news.texi
+	* man/lang.texi: updated
+
 2009-09-24  Christopher Bratusek <zanghar freenet de>
 	* librep.ebuild.in: improved [Fuchur] [Christopher Bratusek]
 
diff --git a/man/lang.texi b/man/lang.texi
index 1ae5368..634944f 100644
--- a/man/lang.texi
+++ b/man/lang.texi
@@ -7384,6 +7384,10 @@ Returns true when the file @var{file-name} is readable.
 Returns true when the file @var{file-name} is writable.
 @end defun
 
+ defun file-executable-p file-name
+Returns true when the file @var{file-name} is executable.
+ end defun
+
 @defun file-owner-p file-name
 Returns true when the ownership of the file @var{file-name} is
 the same as that of any files written by the editor.
diff --git a/man/news.texi b/man/news.texi
index 9e8b569..1186793 100644
--- a/man/news.texi
+++ b/man/news.texi
@@ -7,6 +7,8 @@
 
 @itemize @bullet
 
+ item Added @code{file-executable-p} function
+
 @item Improved spec-file [Kim B. Heino]
 
 @item Improved ebuild [Fuchur, Christopher Bratusek]
diff --git a/src/files.c b/src/files.c
index 4db5541..abfbdcf 100644
--- a/src/files.c
+++ b/src/files.c
@@ -126,6 +126,7 @@ DEFSYM(copy_file_to_local_fs, "copy-file-to-local-fs");
 DEFSYM(copy_file_from_local_fs, "copy-file-from-local-fs");
 DEFSYM(file_readable_p, "file-readable-p");
 DEFSYM(file_writable_p, "file-writable-p");
+DEFSYM(file_executable_p, "file-executable-p");
 DEFSYM(file_exists_p, "file-exists-p");
 DEFSYM(file_regular_p, "file-regular-p");
 DEFSYM(file_directory_p, "file-directory-p");
@@ -1209,6 +1210,24 @@ Returns t if the file called FILE-NAME is available for writing to.
 				     Qfile_writable_p, 1, file);
 }
 
+DEFUN("file-executable-p", Ffile_executable_p, Sfile_executable_p,
+		(repv file), rep_Subr1) /*
+::doc:rep.io.files#file-executable-p::
+file-executable-p FILE-NAME
+
+Returns t if the file called FILE-NAME is executable.
+::end:: */
+{
+    repv handler = rep_expand_and_get_handler(&file, op_file_executable_p);
+    if(!handler)
+	return handler;
+    if(rep_NILP(handler))
+	return rep_file_executable_p(file);
+    else
+	return rep_call_file_handler(handler, op_file_executable_p,
+			             Qfile_executable_p, 1, file);
+}
+
 DEFUN("file-exists-p", Ffile_exists_p, Sfile_exists_p,
       (repv file), rep_Subr1) /*
 ::doc:rep.io.files#file-exists-p::
@@ -1652,6 +1671,7 @@ rep_files_init(void)
     rep_INTERN(copy_file_from_local_fs);
     rep_INTERN(file_readable_p);
     rep_INTERN(file_writable_p);
+    rep_INTERN(file_executable_p);
     rep_INTERN(file_exists_p);
     rep_INTERN(file_regular_p);
     rep_INTERN(file_directory_p);
@@ -1707,6 +1727,7 @@ rep_files_init(void)
 
     rep_ADD_SUBR(Sfile_readable_p);
     rep_ADD_SUBR(Sfile_writable_p);
+    rep_ADD_SUBR(Sfile_executable_p);
     rep_ADD_SUBR(Sfile_exists_p);
     rep_ADD_SUBR(Sfile_regular_p);
     rep_ADD_SUBR(Sfile_directory_p);
diff --git a/src/librep.sym b/src/librep.sym
index 6c91690..4caec47 100644
--- a/src/librep.sym
+++ b/src/librep.sym
@@ -111,6 +111,7 @@ Ffile_regular_p
 Ffile_size
 Ffile_symlink_p
 Ffile_writable_p
+Ffile_executable_p
 Ffilep
 Ffilter
 Ffind_symbol
@@ -440,6 +441,7 @@ Qfile_regular_p
 Qfile_size
 Qfile_symlink_p
 Qfile_writable_p
+Qfile_executable_p
 Qflatten_table
 Qfluid
 Qflush_file
diff --git a/src/rep_subrs.h b/src/rep_subrs.h
index a8f4b63..9d50511 100644
--- a/src/rep_subrs.h
+++ b/src/rep_subrs.h
@@ -114,6 +114,7 @@ extern repv Fdelete_directory(repv);
 extern repv Fcopy_file(repv, repv);
 extern repv Ffile_readable_p(repv file);
 extern repv Ffile_writable_p(repv file);
+extern repv Ffile_executable_p(repv file);
 extern repv Ffile_exists_p(repv file);
 extern repv Ffile_regular_p(repv file);
 extern repv Ffile_directory_p(repv file);
diff --git a/src/repint.h b/src/repint.h
index 09fcddb..59435af 100644
--- a/src/repint.h
+++ b/src/repint.h
@@ -71,6 +71,7 @@ enum file_ops {
     op_copy_file_from_local_fs,
     op_file_readable_p,
     op_file_writable_p,
+    op_file_executable_p,
     op_file_exists_p,
     op_file_regular_p,
     op_file_directory_p,
diff --git a/src/repint_subrs.h b/src/repint_subrs.h
index 9a2d4cc..9d5d9d5 100644
--- a/src/repint_subrs.h
+++ b/src/repint_subrs.h
@@ -202,6 +202,7 @@ extern repv rep_delete_directory(repv dir);
 extern repv rep_copy_file(repv src, repv dst);
 extern repv rep_file_readable_p(repv file);
 extern repv rep_file_writable_p(repv file);
+extern repv rep_file_executable_p(repv file);
 extern repv rep_file_exists_p(repv file);
 extern repv rep_file_regular_p(repv file);
 extern repv rep_file_directory_p(repv file);
diff --git a/src/unix_files.c b/src/unix_files.c
index 180a4c4..840eb8e 100644
--- a/src/unix_files.c
+++ b/src/unix_files.c
@@ -379,6 +379,12 @@ rep_file_writable_p(repv file)
 }
 
 repv
+rep_file_executable_p(repv file)
+{
+    return access(rep_STR(file), X_OK) == 0 ? Qt : Qnil;
+}
+
+repv
 rep_file_exists_p(repv file)
 {
     return access(rep_STR(file), F_OK) == 0 ? Qt : Qnil;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]