1: /*- 2: * Copyright (c) 1990 The Regents of the University of California. 3: * All rights reserved. 4: * 5: * This code is derived from software contributed to Berkeley by 6: * Hugh Smith at The University of Guelph. 7: * 8: * Redistribution and use in source and binary forms, with or without 9: * modification, are permitted provided that the following conditions 10: * are met: 11: * 1. Redistributions of source code must retain the above copyright 12: * notice, this list of conditions and the following disclaimer. 13: * 2. Redistributions in binary form must reproduce the above copyright 14: * notice, this list of conditions and the following disclaimer in the 15: * documentation and/or other materials provided with the distribution. 16: * 3. All advertising materials mentioning features or use of this software 17: * must display the following acknowledgement: 18: * This product includes software developed by the University of 19: * California, Berkeley and its contributors. 20: * 4. Neither the name of the University nor the names of its contributors 21: * may be used to endorse or promote products derived from this software 22: * without specific prior written permission. 23: * 24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34: * SUCH DAMAGE. 35: */ 36: 37: #if defined(DOSCCS) && !defined(lint) 38: static char sccsid[] = "@(#)contents.c 5.6 (Berkeley) 3/12/91"; 39: #endif 40: 41: #include <sys/param.h> 42: #include <sys/stat.h> 43: #include <sys/time.h> 44: #include <fcntl.h> 45: #include <tzfile.h> 46: #include <sys/dir.h> 47: #include <ar.h> 48: #include <stdio.h> 49: #include <string.h> 50: #include "archive.h" 51: #include "extern.h" 52: 53: extern CHDR chdr; /* converted header */ 54: extern char *archive; /* archive name */ 55: 56: /* 57: * contents -- 58: * Handles t[v] option - opens the archive and then reads headers, 59: * skipping member contents. 60: */ 61: contents(argv) 62: register char **argv; 63: { 64: register int afd, all; 65: struct tm *tp; 66: char *file, buf[25]; 67: 68: afd = open_archive(O_RDONLY); 69: 70: for (all = !*argv; get_arobj(afd);) { 71: if (all) 72: file = chdr.name; 73: else if (!(file = files(argv))) 74: goto next; 75: if (options & AR_V) { 76: (void)strmode(chdr.mode, buf); 77: (void)printf("%s %6d/%-6d %8ld ", 78: buf + 1, chdr.uid, chdr.gid, chdr.size); 79: tp = localtime(&chdr.date); 80: #ifdef bloat 81: (void)strftime(buf, sizeof(buf), "%b %e %H:%M %Y", tp); 82: (void)printf("%s %s\n", buf, file); 83: #else 84: { 85: /* 86: * Bloat avoidance alert! Doing the date this way saves dragging in not only 87: * strftime() but mktime() and ctime() for a savings of over 8kb. God, those 88: * leap seconds or whatever don't come cheap, the old (4.3BSD) timezone code 89: * was big enough but this new stuff (posix?) is horrid. 90: */ 91: static char *months[] = {"Jan", "Feb", "Mar", "Apr", 92: "May", "Jun", "Jul", "Aug", 93: "Sep", "Oct", "Nov", "Dec"}; 94: 95: (void)printf("%s %02d %02d:%02d %4d %s\n", 96: months[tp->tm_mon], tp->tm_mday, tp->tm_hour, 97: tp->tm_min, 1900+tp->tm_year, file); 98: } 99: #endif 100: } else 101: (void)printf("%s\n", file); 102: if (!all && !*argv) 103: break; 104: next: skip_arobj(afd); 105: } 106: close_archive(afd); 107: 108: if (*argv) { 109: orphans(argv); 110: return(1); 111: } 112: return(0); 113: }