aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-07-26 23:07:52 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-07-26 23:07:52 +0300
commite4945f9ecab4d2a143f9e41b6a112bb2d36fa7c1 (patch)
treef8aa8492b90d2ed5bc3c44e5148e25621f1dd8b5
parentce63a9b40865adeaa643208d9c645bd5ac5575e3 (diff)
downloadegawk-e4945f9ecab4d2a143f9e41b6a112bb2d36fa7c1.tar.gz
egawk-e4945f9ecab4d2a143f9e41b6a112bb2d36fa7c1.tar.bz2
egawk-e4945f9ecab4d2a143f9e41b6a112bb2d36fa7c1.zip
Add os_isreadable function for future use.
-rw-r--r--ChangeLog1
-rw-r--r--awk.h1
-rw-r--r--pc/ChangeLog4
-rw-r--r--pc/gawkmisc.pc25
-rw-r--r--posix/ChangeLog4
-rw-r--r--posix/gawkmisc.c25
-rw-r--r--vms/ChangeLog4
-rw-r--r--vms/gawkmisc.vms25
8 files changed, 89 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a7368de0..44de58f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
* awk.h (set_RT_to_null, set_RT): Declare functions.
+ (os_isreadable): Declare function.
* io.c (set_RT_to_null, set_RT): New functions.
(iop_close): Init ret to zero.
* gawkapi.c (api_register_input_parser): Check for null pointer.
diff --git a/awk.h b/awk.h
index ebdbe777..3b7129fa 100644
--- a/awk.h
+++ b/awk.h
@@ -1532,6 +1532,7 @@ extern int os_devopen(const char *name, int flag);
extern void os_close_on_exec(int fd, const char *name, const char *what, const char *dir);
extern int os_isatty(int fd);
extern int os_isdir(int fd);
+extern int os_isreadable(int fd);
extern int os_is_setuid(void);
extern int os_setbinmode(int fd, int mode);
extern void os_restore_mode(int fd);
diff --git a/pc/ChangeLog b/pc/ChangeLog
index 1eb51812..43221928 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkmisc.pc (os_isreadable): New function.
+
2012-05-06 Eli Zaretskii <eliz@gnu.org>
* config.sed: Update DJGPP -> __DJGPP__.
diff --git a/pc/gawkmisc.pc b/pc/gawkmisc.pc
index b368e81f..999167ca 100644
--- a/pc/gawkmisc.pc
+++ b/pc/gawkmisc.pc
@@ -232,6 +232,31 @@ int fd;
return (fstat(fd, &sbuf) == 0 && S_ISDIR(sbuf.st_mode));
}
+/* os_isreadable --- fd can be read from */
+
+int
+os_isreadable(int fd)
+{
+ struct stat sbuf;
+
+ if (fstat(fd, &sbuf) != 0)
+ return false;
+
+ switch (sbuf.st_mode & S_IFMT) {
+ case S_IFREG:
+ case S_IFCHR: /* ttys, /dev/null, .. */
+#ifdef S_IFSOCK
+ case S_IFSOCK:
+#endif
+#ifdef S_IFIFO
+ case S_IFIFO:
+#endif
+ return true;
+ default:
+ return false;
+ }
+}
+
/* os_is_setuid --- true if running setuid root */
int
diff --git a/posix/ChangeLog b/posix/ChangeLog
index bf36414f..a3ee87db 100644
--- a/posix/ChangeLog
+++ b/posix/ChangeLog
@@ -1,3 +1,7 @@
+2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkmisc.c (os_isreadable): New function.
+
2012-05-11 Arnold D. Robbins <arnold@skeeve.com>
* gawkmisc.c: Use `bool', `true', and `false' everywhere.
diff --git a/posix/gawkmisc.c b/posix/gawkmisc.c
index 3baf852e..87a6747c 100644
--- a/posix/gawkmisc.c
+++ b/posix/gawkmisc.c
@@ -204,6 +204,31 @@ os_isdir(int fd)
return (fstat(fd, &sbuf) == 0 && S_ISDIR(sbuf.st_mode));
}
+/* os_isreadable --- fd can be read from */
+
+int
+os_isreadable(int fd)
+{
+ struct stat sbuf;
+
+ if (fstat(fd, &sbuf) != 0)
+ return false;
+
+ switch (sbuf.st_mode & S_IFMT) {
+ case S_IFREG:
+ case S_IFCHR: /* ttys, /dev/null, .. */
+#ifdef S_IFSOCK
+ case S_IFSOCK:
+#endif
+#ifdef S_IFIFO
+ case S_IFIFO:
+#endif
+ return true;
+ default:
+ return false;
+ }
+}
+
/* os_is_setuid --- true if running setuid root */
int
diff --git a/vms/ChangeLog b/vms/ChangeLog
index 9988d34b..c4cb6ed9 100644
--- a/vms/ChangeLog
+++ b/vms/ChangeLog
@@ -1,3 +1,7 @@
+2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkmisc.vms (os_isreadable): New function.
+
2012-03-29 Arnold D. Robbins <arnold@skeeve.com>
* config.h: Add definition for _Noreturn.
diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms
index 90b2530b..f373b5f2 100644
--- a/vms/gawkmisc.vms
+++ b/vms/gawkmisc.vms
@@ -144,6 +144,31 @@ int fd;
return (fstat(fd, &sbuf) == 0 && S_ISDIR(sbuf.st_mode));
}
+/* os_isreadable --- fd can be read from */
+
+int
+os_isreadable(int fd)
+{
+ struct stat sbuf;
+
+ if (fstat(fd, &sbuf) != 0)
+ return false;
+
+ switch (sbuf.st_mode & S_IFMT) {
+ case S_IFREG:
+ case S_IFCHR: /* ttys, /dev/null, .. */
+#ifdef S_IFSOCK
+ case S_IFSOCK:
+#endif
+#ifdef S_IFIFO
+ case S_IFIFO:
+#endif
+ return true;
+ default:
+ return false;
+ }
+}
+
/* os_is_setuid --- true if running setuid root */
int