1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-12 15:06:44 +02:00

(S_ISLNK, S_ISFIFO, S_ISSOCK, S_ISCHR, S_ISBLK, S_ISDOOR):

Define to zero if not already defined.
(HAVE_SYMLINKS): Define.
(gobble_file): Remove #ifdef.
(get_link_name, make_link_path): Guard these with #if HAVE_SYMLINKS
rather than #ifdef S_ISLNK.
(print_type_indicator): Remove #ifdefs and reorganize.
(print_color_indicator): Remove #ifdefs.
(length_of_file_name_and_frills): Likewise.
This commit is contained in:
Jim Meyering
1999-02-03 05:41:18 +00:00
parent 43aa4122fc
commit 751a3dc73b

118
src/ls.c
View File

@@ -89,6 +89,38 @@
# define INODE_DIGITS 7
#endif
#ifdef S_ISLNK
# define HAVE_SYMLINKS 1
#else
# define HAVE_SYMLINKS 0
#endif
/* If any of the S_* macros are undefined, define them here so each
use doesn't have to be guarded with e.g., #ifdef S_ISLNK. */
#ifndef S_ISLNK
# define S_ISLNK(Mode) 0
#endif
#ifndef S_ISFIFO
# define S_ISFIFO(Mode) 0
#endif
#ifndef S_ISSOCK
# define S_ISSOCK(Mode) 0
#endif
#ifndef S_ISCHR
# define S_ISCHR(Mode) 0
#endif
#ifndef S_ISBLK
# define S_ISBLK(Mode) 0
#endif
#ifndef S_ISDOOR
# define S_ISDOOR(Mode) 0
#endif
enum filetype
{
symbolic_link,
@@ -1704,7 +1736,6 @@ gobble_file (const char *name, int explicit_arg, const char *dirname)
return 0;
}
#ifdef S_ISLNK
if (S_ISLNK (files[files_index].stat.st_mode)
&& (explicit_arg || format == long_format || print_with_color))
{
@@ -1752,14 +1783,10 @@ gobble_file (const char *name, int explicit_arg, const char *dirname)
if (linkpath)
free (linkpath);
}
#endif
#ifdef S_ISLNK
if (S_ISLNK (files[files_index].stat.st_mode))
files[files_index].filetype = symbolic_link;
else
#endif
if (S_ISDIR (files[files_index].stat.st_mode))
else if (S_ISDIR (files[files_index].stat.st_mode))
{
if (explicit_arg && !immediate_dirs)
files[files_index].filetype = arg_directory;
@@ -1787,7 +1814,7 @@ gobble_file (const char *name, int explicit_arg, const char *dirname)
return blocks;
}
#ifdef S_ISLNK
#if HAVE_SYMLINKS
/* Put the name of the file that `filename' is a symbolic link to
into the `linkname' field of `f'. */
@@ -2397,32 +2424,33 @@ print_file_name_and_frills (const struct fileinfo *f)
static void
print_type_indicator (unsigned int mode)
{
if (S_ISDIR (mode))
DIRED_PUTCHAR ('/');
int c;
#ifdef S_ISLNK
if (S_ISLNK (mode))
DIRED_PUTCHAR ('@');
#endif
if (S_ISREG (mode))
{
if (indicator_style == classify && (mode & S_IXUGO))
c ='*';
else
c = 0;
}
else
{
if (S_ISDIR (mode))
c = '/';
else if (S_ISLNK (mode))
c = '@';
else if (S_ISFIFO (mode))
c = '|';
else if (S_ISSOCK (mode))
c = '=';
else if (S_ISDOOR (mode))
c = '>';
else
c = 0;
}
#ifdef S_ISFIFO
if (S_ISFIFO (mode))
DIRED_PUTCHAR ('|');
#endif
#ifdef S_ISSOCK
if (S_ISSOCK (mode))
DIRED_PUTCHAR ('=');
#endif
#ifdef S_ISDOOR
if (S_ISDOOR (mode))
DIRED_PUTCHAR ('>');
#endif
if (S_ISREG (mode) && indicator_style == classify
&& (mode & S_IXUGO))
DIRED_PUTCHAR ('*');
if (c)
DIRED_PUTCHAR (c);
}
static void
@@ -2443,37 +2471,19 @@ print_color_indicator (const char *name, unsigned int mode, int linkok)
{
if (S_ISDIR (mode))
type = C_DIR;
#ifdef S_ISLNK
else if (S_ISLNK (mode))
type = ((!linkok && color_indicator[C_ORPHAN].string)
? C_ORPHAN : C_LINK);
#endif
#ifdef S_ISFIFO
else if (S_ISFIFO (mode))
type = C_FIFO;
#endif
#ifdef S_ISSOCK
else if (S_ISSOCK (mode))
type = C_SOCK;
#endif
#ifdef S_ISBLK
else if (S_ISBLK (mode))
type = C_BLK;
#endif
#ifdef S_ISCHR
else if (S_ISCHR (mode))
type = C_CHR;
#endif
#ifdef S_ISDOOR
else if (S_ISDOOR (mode))
type = C_DOOR;
#endif
if (type == C_FILE && (mode & S_IXUGO) != 0)
type = C_EXEC;
@@ -2538,19 +2548,11 @@ length_of_file_name_and_frills (const struct fileinfo *f)
len += 1;
}
else if (S_ISDIR (filetype)
#ifdef S_ISLNK
|| S_ISLNK (filetype)
#endif
#ifdef S_ISFIFO
|| S_ISFIFO (filetype)
#endif
#ifdef S_ISSOCK
|| S_ISSOCK (filetype)
#endif
#ifdef S_ISDOOR
|| S_ISDOOR (filetype)
#endif
)
)
len += 1;
}