version 1.1, 2005/04/01 07:07:31 |
version 1.2, 2005/04/02 13:48:35 |
|
|
"$OpenBSD$"; |
"$OpenBSD$"; |
#endif |
#endif |
|
|
#if ! HAVE_NBTOOL_CONFIG_H |
|
#define HAVE_STRUCT_STAT_ST_FLAGS 1 |
|
#define HAVE_STRUCT_STAT_ST_GEN 1 |
|
#define HAVE_STRUCT_STAT_ST_BIRTHTIME 0 |
#define HAVE_STRUCT_STAT_ST_BIRTHTIME 0 |
#define HAVE_STRUCT_STAT_ST_MTIMENSEC 1 |
|
#define HAVE_DEVNAME 1 |
|
#endif /* HAVE_NBTOOL_CONFIG_H */ |
|
|
|
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <sys/stat.h> |
|
|
#include <time.h> |
#include <time.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
#if HAVE_STRUCT_STAT_ST_FLAGS |
|
#define DEF_F "%#Xf " |
#define DEF_F "%#Xf " |
#define RAW_F "%f " |
#define RAW_F "%f " |
#define SHELL_F " st_flags=%f" |
#define SHELL_F " st_flags=%f" |
#else /* HAVE_STRUCT_STAT_ST_FLAGS */ |
|
#define DEF_F |
|
#define RAW_F |
|
#define SHELL_F |
|
#endif /* HAVE_STRUCT_STAT_ST_FLAGS */ |
|
|
|
#if HAVE_STRUCT_STAT_ST_BIRTHTIME |
#if HAVE_STRUCT_STAT_ST_BIRTHTIME |
#define DEF_B "\"%SB\" " |
#define DEF_B "\"%SB\" " |
|
|
#define SHELL_B |
#define SHELL_B |
#endif /* HAVE_STRUCT_STAT_ST_BIRTHTIME */ |
#endif /* HAVE_STRUCT_STAT_ST_BIRTHTIME */ |
|
|
#if HAVE_STRUCT_STAT_ST_ATIM |
|
#define st_atimespec st_atim |
|
#define st_ctimespec st_ctim |
|
#define st_mtimespec st_mtim |
|
#endif /* HAVE_STRUCT_STAT_ST_ATIM */ |
|
|
|
#define DEF_FORMAT \ |
#define DEF_FORMAT \ |
"%d %i %Sp %l %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%Sc\" " DEF_B \ |
"%d %i %Sp %l %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%Sc\" " DEF_B \ |
"%k %b " DEF_F "%N" |
"%k %b " DEF_F "%N" |
|
|
case SHOW_st_rdev: |
case SHOW_st_rdev: |
small = (sizeof(st->st_dev) == 4); |
small = (sizeof(st->st_dev) == 4); |
data = (what == SHOW_st_dev) ? st->st_dev : st->st_rdev; |
data = (what == SHOW_st_dev) ? st->st_dev : st->st_rdev; |
#if HAVE_DEVNAME |
|
sdata = (what == SHOW_st_dev) ? |
sdata = (what == SHOW_st_dev) ? |
devname(st->st_dev, S_IFBLK) : |
devname(st->st_dev, S_IFBLK) : |
devname(st->st_rdev, |
devname(st->st_rdev, |
|
|
0U); |
0U); |
if (sdata == NULL) |
if (sdata == NULL) |
sdata = "???"; |
sdata = "???"; |
#endif /* HAVE_DEVNAME */ |
|
if (hilo == HIGH_PIECE) { |
if (hilo == HIGH_PIECE) { |
data = major(data); |
data = major(data); |
hilo = 0; |
hilo = 0; |
|
|
hilo = 0; |
hilo = 0; |
} |
} |
formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX | |
formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX | |
#if HAVE_DEVNAME |
|
FMTF_STRING; |
FMTF_STRING; |
#else /* HAVE_DEVNAME */ |
|
0; |
|
#endif /* HAVE_DEVNAME */ |
|
if (ofmt == 0) |
if (ofmt == 0) |
ofmt = FMTF_UNSIGNED; |
ofmt = FMTF_UNSIGNED; |
break; |
break; |
|
|
case SHOW_st_atime: |
case SHOW_st_atime: |
gottime = 1; |
gottime = 1; |
secs = st->st_atime; |
secs = st->st_atime; |
#if HAVE_STRUCT_STAT_ST_MTIMENSEC |
|
nsecs = st->st_atimensec; |
nsecs = st->st_atimensec; |
#endif |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case SHOW_st_mtime: |
case SHOW_st_mtime: |
if (!gottime) { |
if (!gottime) { |
gottime = 1; |
gottime = 1; |
secs = st->st_mtime; |
secs = st->st_mtime; |
#if HAVE_STRUCT_STAT_ST_MTIMENSEC |
|
nsecs = st->st_mtimensec; |
nsecs = st->st_mtimensec; |
#endif |
|
} |
} |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case SHOW_st_ctime: |
case SHOW_st_ctime: |
if (!gottime) { |
if (!gottime) { |
gottime = 1; |
gottime = 1; |
secs = st->st_ctime; |
secs = st->st_ctime; |
#if HAVE_STRUCT_STAT_ST_MTIMENSEC |
|
nsecs = st->st_ctimensec; |
nsecs = st->st_ctimensec; |
#endif |
|
} |
} |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
#if HAVE_STRUCT_STAT_ST_BIRTHTIME |
#if HAVE_STRUCT_STAT_ST_BIRTHTIME |
|
|
if (ofmt == 0) |
if (ofmt == 0) |
ofmt = FMTF_UNSIGNED; |
ofmt = FMTF_UNSIGNED; |
break; |
break; |
#if HAVE_STRUCT_STAT_ST_FLAGS |
|
case SHOW_st_flags: |
case SHOW_st_flags: |
small = (sizeof(st->st_flags) == 4); |
small = (sizeof(st->st_flags) == 4); |
data = st->st_flags; |
data = st->st_flags; |
|
|
if (ofmt == 0) |
if (ofmt == 0) |
ofmt = FMTF_UNSIGNED; |
ofmt = FMTF_UNSIGNED; |
break; |
break; |
#endif /* HAVE_STRUCT_STAT_ST_FLAGS */ |
|
#if HAVE_STRUCT_STAT_ST_GEN |
|
case SHOW_st_gen: |
case SHOW_st_gen: |
small = (sizeof(st->st_gen) == 4); |
small = (sizeof(st->st_gen) == 4); |
data = st->st_gen; |
data = st->st_gen; |
|
|
if (ofmt == 0) |
if (ofmt == 0) |
ofmt = FMTF_UNSIGNED; |
ofmt = FMTF_UNSIGNED; |
break; |
break; |
#endif /* HAVE_STRUCT_STAT_ST_GEN */ |
|
case SHOW_symlink: |
case SHOW_symlink: |
small = 0; |
small = 0; |
data = 0; |
data = 0; |
|
|
case S_IFLNK: |
case S_IFLNK: |
(void)strlcat(sdata, "@", sizeof(smode)); |
(void)strlcat(sdata, "@", sizeof(smode)); |
break; |
break; |
#ifdef S_IFSOCK |
|
case S_IFSOCK: |
case S_IFSOCK: |
(void)strlcat(sdata, "=", sizeof(smode)); |
(void)strlcat(sdata, "=", sizeof(smode)); |
break; |
break; |
#endif |
|
#ifdef S_IFWHT |
|
case S_IFWHT: |
case S_IFWHT: |
(void)strlcat(sdata, "%", sizeof(smode)); |
(void)strlcat(sdata, "%", sizeof(smode)); |
break; |
break; |
#endif /* S_IFWHT */ |
|
#ifdef S_IFDOOR |
|
case S_IFDOOR: |
|
(void)strlcat(sdata, ">", sizeof(smode)); |
|
break; |
|
#endif /* S_IFDOOR */ |
|
} |
} |
hilo = 0; |
hilo = 0; |
} |
} |
|
|
case S_IFBLK: sdata = "Block Device"; break; |
case S_IFBLK: sdata = "Block Device"; break; |
case S_IFREG: sdata = "Regular File"; break; |
case S_IFREG: sdata = "Regular File"; break; |
case S_IFLNK: sdata = "Symbolic Link"; break; |
case S_IFLNK: sdata = "Symbolic Link"; break; |
#ifdef S_IFSOCK |
|
case S_IFSOCK: sdata = "Socket"; break; |
case S_IFSOCK: sdata = "Socket"; break; |
#endif |
|
#ifdef S_IFWHT |
|
case S_IFWHT: sdata = "Whiteout File"; break; |
case S_IFWHT: sdata = "Whiteout File"; break; |
#endif /* S_IFWHT */ |
|
#ifdef S_IFDOOR |
|
case S_IFDOOR: sdata = "Door"; break; |
|
#endif /* S_IFDOOR */ |
|
default: sdata = "???"; break; |
default: sdata = "???"; break; |
} |
} |
hilo = 0; |
hilo = 0; |