1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2002 Silicon Graphics, Inc.
13 #include <sys/sysmacros.h>
18 timesince(long timesec)
20 long d_since; /* days */
21 long h_since; /* hours */
22 long m_since; /* minutes */
23 long s_since; /* seconds */
25 s_since = timebuf - timesec;
26 d_since = s_since / 86400l ;
27 s_since -= d_since * 86400l ;
28 h_since = s_since / 3600l ;
29 s_since -= h_since * 3600l ;
30 m_since = s_since / 60l ;
31 s_since -= m_since * 60l ;
33 printf("(%05ld.%02ld:%02ld:%02ld)\n",
34 d_since, h_since, m_since, s_since);
40 fprintf(stderr, "Usage: lstat64 [-t] filename ...\n");
45 main(int argc, char **argv)
51 while ((c = getopt(argc, argv, "t")) != EOF) {
67 for (i = optind; i < argc; i++) {
68 char mode[] = "----------";
70 if( lstat64(argv[i], &sbuf) < 0) {
76 printf("%s %llu ", argv[i], (unsigned long long)sbuf.st_size);
79 printf(" File: \"%s\"\n", argv[i]);
80 printf(" Size: %-10llu", (unsigned long long)sbuf.st_size);
83 if (sbuf.st_mode & S_IXOTH)
85 if (sbuf.st_mode & S_IWOTH)
87 if (sbuf.st_mode & S_IROTH)
89 if (sbuf.st_mode & S_IXGRP)
91 if (sbuf.st_mode & S_IWGRP)
93 if (sbuf.st_mode & S_IRGRP)
95 if (sbuf.st_mode & S_IXUSR)
97 if (sbuf.st_mode & S_IWUSR)
99 if (sbuf.st_mode & S_IRUSR)
101 if (sbuf.st_mode & S_ISVTX)
103 if (sbuf.st_mode & S_ISGID)
105 if (sbuf.st_mode & S_ISUID)
109 printf(" Filetype: ");
110 switch (sbuf.st_mode & S_IFMT) {
123 puts("Character Device");
128 puts("Block Device");
133 puts("Regular File");
138 puts("Symbolic Link");
153 printf("%s %d,%d\n", mode, (int)sbuf.st_uid, (int)sbuf.st_gid);
157 printf(" Mode: (%04o/%s)", (unsigned int)(sbuf.st_mode & 07777), mode);
158 printf(" Uid: (%d)", (int)sbuf.st_uid);
159 printf(" Gid: (%d)\n", (int)sbuf.st_gid);
160 printf("Device: %2d,%-2d", major(sbuf.st_dev),
162 printf(" Inode: %-9llu", (unsigned long long)sbuf.st_ino);
163 printf(" Links: %-5ld", (long)sbuf.st_nlink);
165 if ( ((sbuf.st_mode & S_IFMT) == S_IFCHR)
166 || ((sbuf.st_mode & S_IFMT) == S_IFBLK) )
167 printf(" Device type: %2d,%-2d\n",
168 major(sbuf.st_rdev), minor(sbuf.st_rdev));
172 printf("Access: %.24s",ctime(&sbuf.st_atime));
173 timesince(sbuf.st_atime);
174 printf("Modify: %.24s",ctime(&sbuf.st_mtime));
175 timesince(sbuf.st_mtime);
176 printf("Change: %.24s",ctime(&sbuf.st_ctime));
177 timesince(sbuf.st_ctime);