diff options
author | Eric Andersen <andersen@codepoet.org> | 1999-11-09 01:47:36 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 1999-11-09 01:47:36 +0000 |
commit | 50d6360771be509737bb55b2cc5bc5e25f2a4fea (patch) | |
tree | 81d4cfe9ec9b5281924f678c28f61542616a3db7 /coreutils/ls.c | |
parent | fbb39c83b69d6c4de943c0b7374000339635d13d (diff) | |
download | busybox-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.c | 61 |
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 | |||
93 | static 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 | |||
101 | static 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); |