summaryrefslogtreecommitdiff
path: root/coreutils/ls.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>1999-11-09 01:47:36 +0000
committerEric Andersen <andersen@codepoet.org>1999-11-09 01:47:36 +0000
commit50d6360771be509737bb55b2cc5bc5e25f2a4fea (patch)
tree81d4cfe9ec9b5281924f678c28f61542616a3db7 /coreutils/ls.c
parentfbb39c83b69d6c4de943c0b7374000339635d13d (diff)
downloadbusybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.tar.gz
busybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.tar.bz2
busybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.zip
Stuff
Diffstat (limited to 'coreutils/ls.c')
-rw-r--r--coreutils/ls.c61
1 files changed, 13 insertions, 48 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 4eb486f87..f09cbbc22 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -40,7 +40,7 @@
40 * 1. requires lstat (BSD) - how do you do it without? 40 * 1. requires lstat (BSD) - how do you do it without?
41 */ 41 */
42 42
43//#define FEATURE_USERNAME /* show username/groupnames (libc6 uses NSS) */ 43#define FEATURE_USERNAME /* show username/groupnames (bypasses libc6 NSS) */
44#define FEATURE_TIMESTAMPS /* show file timestamps */ 44#define FEATURE_TIMESTAMPS /* show file timestamps */
45#define FEATURE_AUTOWIDTH /* calculate terminal & column widths */ 45#define FEATURE_AUTOWIDTH /* calculate terminal & column widths */
46#define FEATURE_FILETYPECHAR /* enable -p and -F */ 46#define FEATURE_FILETYPECHAR /* enable -p and -F */
@@ -64,10 +64,6 @@
64#include <dirent.h> 64#include <dirent.h>
65#include <errno.h> 65#include <errno.h>
66#include <stdio.h> 66#include <stdio.h>
67#ifdef FEATURE_USERNAME
68#include <pwd.h>
69#include <grp.h>
70#endif
71#ifdef FEATURE_TIMESTAMPS 67#ifdef FEATURE_TIMESTAMPS
72#include <time.h> 68#include <time.h>
73#endif 69#endif
@@ -83,27 +79,6 @@
83#define MINOR(dev) ((dev)&0xff) 79#define MINOR(dev) ((dev)&0xff)
84#endif 80#endif
85 81
86#define MODE1 "rwxrwxrwx"
87#define MODE0 "---------"
88#define SMODE1 "..s..s..t"
89#define SMODE0 "..S..S..T"
90
91/* The 9 mode bits to test */
92
93static const mode_t MBIT[] = {
94 S_IRUSR, S_IWUSR, S_IXUSR,
95 S_IRGRP, S_IWGRP, S_IXGRP,
96 S_IROTH, S_IWOTH, S_IXOTH
97};
98
99/* The special bits. If set, display SMODE0/1 instead of MODE0/1 */
100
101static const mode_t SBIT[] = {
102 0, 0, S_ISUID,
103 0, 0, S_ISGID,
104 0, 0, S_ISVTX
105};
106
107#define FMT_AUTO 0 82#define FMT_AUTO 0
108#define FMT_LONG 1 /* one record per line, extended info */ 83#define FMT_LONG 1 /* one record per line, extended info */
109#define FMT_SINGLE 2 /* one record per line */ 84#define FMT_SINGLE 2 /* one record per line */
@@ -216,45 +191,35 @@ static void list_single(const char *name, struct stat *info, const char *fullnam
216 191
217 if (display_fmt == FMT_LONG) { 192 if (display_fmt == FMT_LONG) {
218 mode_t mode = info->st_mode; 193 mode_t mode = info->st_mode;
219 int i;
220
221 scratch[0] = TYPECHAR(mode);
222 for (i=0; i<9; i++)
223 if (mode & SBIT[i])
224 scratch[i+1] = (mode & MBIT[i])
225 ? SMODE1[i]
226 : SMODE0[i];
227 else
228 scratch[i+1] = (mode & MBIT[i])
229 ? MODE1[i]
230 : MODE0[i];
231 newline(); 194 newline();
232 wr(scratch, 10); 195 wr(modeString(mode), 10);
233 column=10; 196 column=10;
234 writenum((long)info->st_nlink,(short)4); 197 writenum((long)info->st_nlink,(short)5);
235 fputs(" ", stdout); 198 fputs(" ", stdout);
236#ifdef FEATURE_USERNAME 199#ifdef FEATURE_USERNAME
237 if (!(opts & DISP_NUMERIC)) { 200 if (!(opts & DISP_NUMERIC)) {
238 struct passwd *pw = getpwuid(info->st_uid); 201 scratch[8]='\0';
239 if (pw) 202 my_getpwuid( scratch, info->st_uid);
240 fputs(pw->pw_name, stdout); 203 if (*scratch)
204 fputs(scratch, stdout);
241 else 205 else
242 writenum((long)info->st_uid,(short)0); 206 writenum((long)info->st_uid,(short)0);
243 } else 207 } else
244#endif 208#endif
245 writenum((long)info->st_uid,(short)0); 209 writenum((long)info->st_uid,(short)0);
246 tab(24); 210 tab(16);
247#ifdef FEATURE_USERNAME 211#ifdef FEATURE_USERNAME
248 if (!(opts & DISP_NUMERIC)) { 212 if (!(opts & DISP_NUMERIC)) {
249 struct group *gr = getgrgid(info->st_gid); 213 scratch[8]='\0';
250 if (gr) 214 my_getgrgid( scratch, info->st_gid);
251 fputs(gr->gr_name, stdout); 215 if (*scratch)
216 fputs(scratch, stdout);
252 else 217 else
253 writenum((long)info->st_gid,(short)0); 218 writenum((long)info->st_gid,(short)0);
254 } else 219 } else
255#endif 220#endif
256 writenum((long)info->st_gid,(short)0); 221 writenum((long)info->st_gid,(short)0);
257 tab(33); 222 tab(17);
258 if (S_ISBLK(mode) || S_ISCHR(mode)) { 223 if (S_ISBLK(mode) || S_ISCHR(mode)) {
259 writenum((long)MAJOR(info->st_rdev),(short)3); 224 writenum((long)MAJOR(info->st_rdev),(short)3);
260 fputs(", ", stdout); 225 fputs(", ", stdout);