From d5071504f3e2887eab96805ce5dffc8c5e4cb99a Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 6 Oct 1993 00:13:56 +0000 Subject: [PATCH] GNU file utilities --- lib/filemode.c | 53 ++++++++++++++++++++++++++++++++++++++++-------- lib/fsusage.c | 2 +- lib/isdir.c | 8 +++++++- lib/makepath.c | 9 +++++++- lib/mkdir.c | 12 ++++++++++- lib/modechange.c | 8 +++++++- lib/rename.c | 8 +++++++- 7 files changed, 86 insertions(+), 14 deletions(-) diff --git a/lib/filemode.c b/lib/filemode.c index 9293af6815..0ec4bf7fd9 100644 --- a/lib/filemode.c +++ b/lib/filemode.c @@ -1,5 +1,5 @@ /* filemode.c -- make a string describing file modes - Copyright (C) 1985, 1990 Free Software Foundation, Inc. + Copyright (C) 1985, 1990, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,8 +16,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H +#if defined (emacs) || defined (CONFIG_BROKETS) +#include +#else #include "config.h" #endif +#endif #include #include @@ -33,26 +37,59 @@ #define mode_t unsigned short #endif +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISBLK +#undef S_ISBLK +#endif +#ifdef S_ISCHR +#undef S_ISCHR +#endif +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#ifdef S_ISFIFO +#undef S_ISFIFO +#endif +#ifdef S_ISLNK +#undef S_ISLNK +#endif +#ifdef S_ISMPB +#undef S_ISMPB +#endif +#ifdef S_ISMPC +#undef S_ISMPC +#endif +#ifdef S_ISNWK +#undef S_ISNWK +#endif +#ifdef S_ISREG +#undef S_ISREG +#endif +#ifdef S_ISSOCK +#undef S_ISSOCK +#endif +#endif /* STAT_MACROS_BROKEN. */ + #if !defined(S_ISBLK) && defined(S_IFBLK) -#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) #endif #if !defined(S_ISCHR) && defined(S_IFCHR) -#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) #endif #if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif #if !defined(S_ISREG) && defined(S_IFREG) -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif #if !defined(S_ISFIFO) && defined(S_IFIFO) -#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) #endif #if !defined(S_ISLNK) && defined(S_IFLNK) -#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) #endif #if !defined(S_ISSOCK) && defined(S_IFSOCK) -#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) #endif #if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */ #define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) diff --git a/lib/fsusage.c b/lib/fsusage.c index 9307a40b5a..2f1179b231 100644 --- a/lib/fsusage.c +++ b/lib/fsusage.c @@ -70,7 +70,7 @@ adjust_blocks (blocks, fromsize, tosize) else if (fromsize > tosize) /* E.g., from 2048 to 512. */ return blocks * (fromsize / tosize); else /* E.g., from 256 to 512. */ - return (blocks + (blocks < 0 ? -1 : +1)) / (tosize / fromsize); + return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize); } /* Fill in the fields of FSP with information about space usage for diff --git a/lib/isdir.c b/lib/isdir.c index 08388e13fe..439235f8e1 100644 --- a/lib/isdir.c +++ b/lib/isdir.c @@ -18,8 +18,14 @@ #include #include +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#endif /* STAT_MACROS_BROKEN. */ + #if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /* If PATH is an existing directory or symbolic link to a directory, diff --git a/lib/makepath.c b/lib/makepath.c index e61579021c..7699c178df 100644 --- a/lib/makepath.c +++ b/lib/makepath.c @@ -38,8 +38,15 @@ char *alloca (); #ifdef HAVE_UNISTD_H #include #endif + +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#endif /* STAT_MACROS_BROKEN. */ + #if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif #ifdef STDC_HEADERS diff --git a/lib/mkdir.c b/lib/mkdir.c index e68ccb17c7..68e6b6327a 100644 --- a/lib/mkdir.c +++ b/lib/mkdir.c @@ -22,6 +22,16 @@ extern int errno; #endif +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#endif /* STAT_MACROS_BROKEN. */ + +#if !defined(S_ISDIR) && defined(S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif + /* mkdir and rmdir adapted from GNU tar. */ /* Make directory DPATH, with permission mode DMODE. @@ -95,7 +105,7 @@ rmdir (dpath) if (stat (dpath, &statbuf) != 0) return -1; /* stat set errno. */ - if ((statbuf.st_mode & S_IFMT) != S_IFDIR) + if (!S_ISDIR (statbuf.st_mode)) { errno = ENOTDIR; return -1; diff --git a/lib/modechange.c b/lib/modechange.c index b09661d0c5..978ab46d17 100644 --- a/lib/modechange.c +++ b/lib/modechange.c @@ -38,7 +38,13 @@ char *malloc (); #define NULL 0 #endif -#ifndef S_ISDIR +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#endif /* STAT_MACROS_BROKEN. */ + +#if !defined(S_ISDIR) && defined(S_IFDIR) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif diff --git a/lib/rename.c b/lib/rename.c index 858190c57d..593cf31dad 100644 --- a/lib/rename.c +++ b/lib/rename.c @@ -22,8 +22,14 @@ extern int errno; #endif +#ifdef STAT_MACROS_BROKEN +#ifdef S_ISDIR +#undef S_ISDIR +#endif +#endif /* STAT_MACROS_BROKEN. */ + #if !defined(S_ISDIR) && defined(S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /* Rename file FROM to file TO. -- 2.39.5