|
|
1.1 ! root 1: /* $Source: /newbits/usr/bin/pax/shipping/pass.c,v $ ! 2: * ! 3: * $Revision: 1.1 $ ! 4: * ! 5: * pass.c - handle the pass option of cpio ! 6: * ! 7: * DESCRIPTION ! 8: * ! 9: * These functions implement the pass options in PAX. The pass option ! 10: * copies files from one directory hierarchy to another. ! 11: * ! 12: * AUTHOR ! 13: * ! 14: * Mark H. Colburn, NAPS International ([email protected]) ! 15: * ! 16: * Sponsored by The USENIX Association for public distribution. ! 17: * ! 18: * Copyright (c) 1989 Mark H. Colburn. ! 19: * All rights reserved. ! 20: * ! 21: * Redistribution and use in source and binary forms are permitted ! 22: * provided that the above copyright notice is duplicated in all such ! 23: * forms and that any documentation, advertising materials, and other ! 24: * materials related to such distribution and use acknowledge that the ! 25: * software was developed * by Mark H. Colburn and sponsored by The ! 26: * USENIX Association. ! 27: * ! 28: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 29: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 30: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 31: * ! 32: * $Log: /newbits/usr/bin/pax/shipping/pass.c,v $ ! 33: * Revision 1.1 91/02/05 11:57:42 bin ! 34: * Initial revision ! 35: * ! 36: * Revision 1.3 89/02/12 10:29:51 mark ! 37: * Fixed misspelling of Replstr ! 38: * ! 39: * Revision 1.2 89/02/12 10:05:09 mark ! 40: * 1.2 release fixes ! 41: * ! 42: * Revision 1.1 88/12/23 18:02:20 mark ! 43: * Initial revision ! 44: * ! 45: */ ! 46: ! 47: #ifndef lint ! 48: static char *ident = "$Id: pass.c,v 1.3 89/02/12 10:29:51 mark Exp $"; ! 49: static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n"; ! 50: #endif /* ! lint */ ! 51: ! 52: ! 53: /* Headers */ ! 54: ! 55: #include "pax.h" ! 56: ! 57: ! 58: /* pass - copy within the filesystem ! 59: * ! 60: * DESCRIPTION ! 61: * ! 62: * Pass copies the named files from the current directory hierarchy to ! 63: * the directory pointed to by dirname. ! 64: * ! 65: * PARAMETERS ! 66: * ! 67: * char *dirname - name of directory to copy named files to. ! 68: * ! 69: */ ! 70: ! 71: #if __STDC__ ! 72: ! 73: int pass(char *dirname) ! 74: ! 75: #else ! 76: ! 77: int pass(dirname) ! 78: char *dirname; ! 79: ! 80: #endif ! 81: { ! 82: char name[PATH_MAX + 1]; ! 83: int fd; ! 84: Stat sb; ! 85: ! 86: while (name_next(name, &sb) >= 0 && (fd = openin(name, &sb)) >= 0) { ! 87: ! 88: if (rplhead != (Replstr *)NULL) { ! 89: rpl_name(name); ! 90: } ! 91: if (get_disposition("pass", name) || get_newname(name, sizeof(name))) { ! 92: /* skip file... */ ! 93: if (fd) { ! 94: close(fd); ! 95: } ! 96: continue; ! 97: } ! 98: ! 99: if (passitem(name, &sb, fd, dirname)) { ! 100: close(fd); ! 101: } ! 102: if (f_verbose) { ! 103: fprintf(stderr, "%s/%s\n", dirname, name); ! 104: } ! 105: } ! 106: } ! 107: ! 108: ! 109: /* passitem - copy one file ! 110: * ! 111: * DESCRIPTION ! 112: * ! 113: * Passitem copies a specific file to the named directory ! 114: * ! 115: * PARAMETERS ! 116: * ! 117: * char *from - the name of the file to open ! 118: * Stat *asb - the stat block associated with the file to copy ! 119: * int ifd - the input file descriptor for the file to copy ! 120: * char *dir - the directory to copy it to ! 121: * ! 122: * RETURNS ! 123: * ! 124: * Returns given input file descriptor or -1 if an error occurs. ! 125: * ! 126: * ERRORS ! 127: */ ! 128: ! 129: #if __STDC__ ! 130: ! 131: int passitem(char *from, Stat *asb, int ifd, char *dir) ! 132: ! 133: #else ! 134: ! 135: int passitem(from, asb, ifd, dir) ! 136: char *from; ! 137: Stat *asb; ! 138: int ifd; ! 139: char *dir; ! 140: ! 141: #endif ! 142: { ! 143: int ofd; ! 144: time_t tstamp[2]; ! 145: char to[PATH_MAX + 1]; ! 146: ! 147: if (nameopt(strcat(strcat(strcpy(to, dir), "/"), from)) < 0) { ! 148: return (-1); ! 149: } ! 150: if (asb->sb_nlink > 1) { ! 151: linkto(to, asb); ! 152: } ! 153: if (f_link && islink(from, asb) == (Link *)NULL) { ! 154: linkto(from, asb); ! 155: } ! 156: if ((ofd = openout(to, asb, islink(to, asb), 1)) < 0) { ! 157: return (-1); ! 158: } ! 159: if (ofd > 0) { ! 160: passdata(from, ifd, to, ofd); ! 161: } ! 162: tstamp[0] = asb->sb_atime; ! 163: tstamp[1] = f_mtime ? asb->sb_mtime : time((time_t *) 0); ! 164: utime(to, tstamp); ! 165: return (ifd); ! 166: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.