|
|
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.