diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | awk.h | 1 | ||||
-rw-r--r-- | pc/ChangeLog | 4 | ||||
-rw-r--r-- | pc/gawkmisc.pc | 25 | ||||
-rw-r--r-- | posix/ChangeLog | 4 | ||||
-rw-r--r-- | posix/gawkmisc.c | 25 | ||||
-rw-r--r-- | vms/ChangeLog | 4 | ||||
-rw-r--r-- | vms/gawkmisc.vms | 25 |
8 files changed, 89 insertions, 0 deletions
@@ -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. @@ -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 |