2 ** Copyright 1998-2003 University of Illinois Board of Trustees
3 ** Copyright 1998-2003 Mark D. Roth
4 ** All rights reserved.
6 ** output.c - libtar code to print out tar header blocks
8 ** Mark D. Roth <roth@uiuc.edu>
9 ** Campus Information Technologies and Educational Services
10 ** University of Illinois at Urbana-Champaign
21 #include <sys/param.h>
28 #ifndef _POSIX_LOGIN_NAME_MAX
29 # define _POSIX_LOGIN_NAME_MAX 9
36 puts("\nPrinting tar header:");
37 printf(" name = \"%.100s\"\n", t
->th_buf
.name
);
38 printf(" mode = \"%.8s\"\n", t
->th_buf
.mode
);
39 printf(" uid = \"%.8s\"\n", t
->th_buf
.uid
);
40 printf(" gid = \"%.8s\"\n", t
->th_buf
.gid
);
41 printf(" size = \"%.12s\"\n", t
->th_buf
.size
);
42 printf(" mtime = \"%.12s\"\n", t
->th_buf
.mtime
);
43 printf(" chksum = \"%.8s\"\n", t
->th_buf
.chksum
);
44 printf(" typeflag = \'%c\'\n", t
->th_buf
.typeflag
);
45 printf(" linkname = \"%.100s\"\n", t
->th_buf
.linkname
);
46 printf(" magic = \"%.6s\"\n", t
->th_buf
.magic
);
47 /*printf(" version = \"%.2s\"\n", t->th_buf.version); */
48 printf(" version[0] = \'%c\',version[1] = \'%c\'\n",
49 t
->th_buf
.version
[0], t
->th_buf
.version
[1]);
50 printf(" uname = \"%.32s\"\n", t
->th_buf
.uname
);
51 printf(" gname = \"%.32s\"\n", t
->th_buf
.gname
);
52 printf(" devmajor = \"%.8s\"\n", t
->th_buf
.devmajor
);
53 printf(" devminor = \"%.8s\"\n", t
->th_buf
.devminor
);
54 printf(" prefix = \"%.155s\"\n", t
->th_buf
.prefix
);
55 printf(" padding = \"%.12s\"\n", t
->th_buf
.padding
);
56 printf(" gnu_longname = \"%s\"\n",
57 (t
->th_buf
.gnu_longname
? t
->th_buf
.gnu_longname
: "[NULL]"));
58 printf(" gnu_longlink = \"%s\"\n",
59 (t
->th_buf
.gnu_longlink
? t
->th_buf
.gnu_longlink
: "[NULL]"));
64 th_print_long_ls(TAR
*t
)
71 char username
[_POSIX_LOGIN_NAME_MAX
];
72 char groupname
[_POSIX_LOGIN_NAME_MAX
];
79 const char *months
[] = {
80 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
81 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
88 snprintf(username
, sizeof(username
), "%d", uid
);
90 strlcpy(username
, pw
->pw_name
, sizeof(username
));
95 snprintf(groupname
, sizeof(groupname
), "%d", gid
);
97 strlcpy(groupname
, gr
->gr_name
, sizeof(groupname
));
99 strmode(th_get_mode(t
), modestring
);
100 printf("%.10s %-8.8s %-8.8s ", modestring
, username
, groupname
);
102 if (TH_ISCHR(t
) || TH_ISBLK(t
))
103 printf(" %3d, %3d ", th_get_devmajor(t
), th_get_devminor(t
));
105 printf("%9ld ", (long)th_get_size(t
));
107 mtime
= th_get_mtime(t
);
108 mtm
= localtime(&mtime
);
110 strftime(timebuf
, sizeof(timebuf
), "%h %e %H:%M %Y", mtm
);
111 printf("%s", timebuf
);
113 printf("%.3s %2d %2d:%02d %4d",
115 mtm
->tm_mday
, mtm
->tm_hour
, mtm
->tm_min
, mtm
->tm_year
+ 1900);
118 printf(" %s", th_get_pathname(t
));
120 if (TH_ISSYM(t
) || TH_ISLNK(t
))
126 if ((t
->options
& TAR_GNU
) && t
->th_buf
.gnu_longlink
!= NULL
)
127 printf("%s", t
->th_buf
.gnu_longlink
);
129 printf("%.100s", t
->th_buf
.linkname
);