"Fossies" - the Fresh Open Source Software Archive 
Member "afio-2.5.2/afio.h" (30 Nov 2018, 14483 Bytes) of package /linux/misc/afio-2.5.2.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "afio.h" see the
Fossies "Dox" file reference documentation and the latest
Fossies "Diffs" side-by-side code changes report:
2.5.1_vs_2.5.2.
1 /* afio.h defines for afio. */
2
3 #ifdef SYSTIME
4 #include <sys/time.h>
5 #else /* SYSTIME */
6 #include <time.h>
7 #endif /* SYSTIME */
8
9 #ifdef CTC3B2
10 #include <sys/vtoc.h>
11 #include <sys/ct.h>
12 #endif /* CTC3B2 */
13
14 #ifdef MYTEMPNAM
15 #include <sys/file.h>
16 #endif
17
18 #ifdef USESHMEM
19 #include <sys/ipc.h>
20 #include <sys/shm.h>
21
22 #define NUMSHKEYS 20
23 #define SHMEMSIZE 262144 /* 2^18 (dev3b1) */
24 #endif
25
26 /* done writing to the archive */
27 #define FALSE 0
28 #define TRUE 1
29 #define NOTDONE 0
30 #define DONE 1
31 #define NODIE 0
32 #define DIE 1
33
34 /* Note for porters: see the PORTING file if your compiler
35 does not support unsigned long long.
36 */
37 typedef unsigned long long ulonglong;
38
39 /* KH */
40 #define MEMFD 10000
41 #define ZIPFD 10001
42 extern int zipfdfd;
43
44 /* flags for the st_rdev field of regular files */
45 /* file is not compressed, ignore any .z extension */
46 #define RDEV_NOTCOMPR 1
47 /* file is a control file */
48 #define RDEV_ISCONTROL 2
49
50 /*
51 An archive entry is a control file if it is a regular file and
52 if the ISCONTROL flag is set. The filename is not important.
53 */
54 #define ISCONTROL(sb) ((((sb)->sb_mode & S_IFMT) == S_IFREG)&&((sb)->sb_rdev & RDEV_ISCONTROL))
55
56 /* pseudo filename for control files */
57 #define CONTROLNAME "CONTROL_FILE"
58
59 /* label value if no label given */
60 #define NOLABEL "no_label"
61
62 /*
63 * Address link information base.
64 */
65 #define linkhash(ino) \
66 (linkbase + ((ino) & 0xffff) % nel(linkbase))
67
68 /*
69 * Mininum value.
70 */
71 #define min(one, two) \
72 (one < two ? one : two)
73
74 /*
75 * Number of array elements.
76 */
77 #define nel(a) \
78 (sizeof(a) / sizeof(*(a)))
79
80 /*
81 * Remove a file or directory.
82 */
83 #define afremove(name, asb) \
84 (((asb)->sb_mode & S_IFMT) == S_IFDIR ? rmdir(name) : unlink(name))
85
86 /*
87 * Swap bytes.
88 */
89 #define swab(n) \
90 ((((unsigned short)(n) >> 8) & 0xff) | (((unsigned short)(n) << 8) & 0xff00))
91
92 /*
93 * Cast and reduce to unsigned short.
94 */
95 #define ush(n) \
96 (((unsigned short) (n)) & 0177777)
97
98 #define ulo(n) \
99 (((unsigned long) (n)) & 0xFFFFFFFFL)
100
101 #define ull(n) \
102 (((unsigned long long) (n)) & 0xFFFFFFFFFFFFFFFFLL)
103 /* 1234567890123456 */
104
105 /*
106 * Definitions.
107 */
108 #define reg register /* Convenience */
109 #define uint unsigned int /* Not always in types.h */
110 #define ushort unsigned short /* Not always in types.h */
111
112 #define BLOCK 5120 /* Default archive block size */
113 #define FSBUF (8*1024) /* Filesystem buffer size */
114 #define H_COUNT 10 /* Number of items in ASCII header */
115
116 /* binary format */
117 #define M_BINARY 070707 /* Binary magic number */
118 #define M_STRLEN 6 /* ASCII magic number length */
119
120 /* (old) ASCII format */
121 #define H_STRLEN 70 /* old ASCII header string length */
122 #define M_ASCII "070707" /* old ASCII magic number */
123 #define H_PRINT "%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo"
124 /* H_SCAN is obsolete, replaced by PH_SCAN to be more portable. */
125 #define H_SCAN "%6ho%6ho%6ho%6ho%6ho%6ho%6ho%11lo%6o%11lo"
126 #define PH_SCAN "%6lo%6lo%6lo%6lo%6lo%6lo%6lo%11lo%6o%11lo"
127
128 /*
129 Below is a handy piece of ASCII art which can be used to decode old
130 ASCII format headers.
131
132 |23456|23456|23456|23456|23456|23456|23456|23456|23456789ab|23456|23456789ab|-
133 | hdr| dev| ino| mode| uid| gid|nlink| rdev| mtime|nmlen| size|n
134 */
135
136 /* extended ASCII format */
137 #define H_STRLEN2 75 /* extended ASCII header string length */
138 #define M_ASCII2 "070717" /* extended ASCII magic number */
139 #define H_PRINT2 "%06o%011lo%06o%06o%06o%06o%06o%011lo%06o%011lo"
140 #define PH_SCAN2 "%6lo%11lo%6lo%6lo%6lo%6lo%6lo%11lo%6o%11lo"
141
142
143 /*
144 Below is a handy piece of ASCII art which can be used to decode large
145 ASCII format headers.
146
147 |23456|2345678|234567890123456m|23456|2345678|2345678|2345678|2345678|234567890123456n|234|234|234s|234567890123456:|-
148 | hdr| dev| inoM| mod| uid| gid| nlink| rdev| mtimeN|nml|flg|xszS| size:|n
149 */
150
151 /* large ASCII format */
152 #define H_STRLEN3 110 /* large ASCII string length */
153 #define M_ASCII3 "070727" /* large ASCII magic number */
154 #define H_COUNT3 12
155 #define H_PRINT3 "%08lX%016llXm%06lo%08lX%08lX%08lX%08lX%016llXn%04X%04X%04Xs%016llX:"
156 #define PH_SCAN3 "%8lX%16llXm%6lo%8lX%8lX%8lX%8llX%16llXn%4X%4X%4Xs%16llX:"
157
158
159
160 typedef struct {
161 long unsigned int PSt_dev;
162 long unsigned int PSt_ino;
163 long unsigned int PSt_mode;
164 long unsigned int PSt_uid;
165 long unsigned int PSt_gid;
166 long unsigned int PSt_nlink;
167 long unsigned int PSt_rdev;
168 long unsigned int PSt_mtime;
169 long unsigned int PSt_size;
170 } PStat;
171
172
173 typedef struct {
174 long unsigned int PSt_dev;
175 unsigned long long PSt_ino;
176 long unsigned int PSt_mode;
177 long unsigned int PSt_uid;
178 long unsigned int PSt_gid;
179 long unsigned int PSt_nlink;
180 unsigned long long PSt_rdev;
181 unsigned long long PSt_mtime;
182 unsigned long long PSt_size;
183 } PHStat;
184
185
186
187 #define NULLDEV -1 /* Null device code */
188 #define NULLINO 0 /* Null inode number */
189 #define PATHELEM 256 /* Pathname element count limit */
190 #define PATHSIZE 1024 /* Pathname length limit */
191 #define S_IFSHF 12 /* File type shift (shb in stat.h) */
192 #define S_IPERM 07777 /* File permission bits (shb in stat.h) */
193 #define S_IPEXE 07000 /* Special execution bits (shb in stat.h) */
194 #define S_IPOPN 0777 /* Open access bits (shb in stat.h) */
195 #define STDIN 0 /* Standard input file descriptor */
196 #define STDOUT 1 /* Standard output file descriptor */
197 #define TTY "/dev/tty" /* For volume-change queries */
198
199 /* the three flags below are used in the match.c code, they allow us
200 to store 3 types of patterns in a single `all patterns' linked
201 list. (the use of a single list is for historical reasons, it is
202 not the most ovbious design for the current needs)
203 */
204 #define PATTYPE_MATCH 0
205 #define PATTYPE_NOMATCH 1
206 #define PATTYPE_EXT 2
207
208 #ifndef PRG_COMPRESS
209 #define PRG_COMPRESS "compress"
210 #endif
211
212 /*
213 * Some versions of the portable "C" compiler (PCC) can't handle
214 * pointers to functions returning void.
215 */
216 #ifdef VOIDFIX
217 #define VOIDFN void /* Expect "void (*fnptr)()" to work */
218 #else /* VOIDFIX */
219 #define VOIDFN int /* Avoid PCC "void (*fnptr)()" bug */
220 #endif /* VOIDFIX */
221
222 /*
223 * Trailer pathnames. All must be of the same length.
224 */
225 #define TRAILER "TRAILER!!!" /* Archive trailer (cpio compatible) */
226 #define TRAILZ 11 /* Trailer pathname length (including null) */
227
228 /*
229 * Open modes; there is no <fcntl.h> with v7 UNIX.
230 */
231 #ifdef HAVEFCNTL
232 #include <fcntl.h>
233 #else
234 #define O_RDONLY 0 /* Read-only */
235 #define O_WRONLY 1 /* Write-only */
236 #define O_RDWR 2 /* Read/write */
237 #endif
238 /*
239 * V7 and BSD UNIX use old-fashioned names for a couple of
240 * string functions.
241 */
242 #ifdef INDEX
243 #define strchr index /* Forward character search */
244 #define strrchr rindex /* Reverse character search */
245 #endif /* INDEX */
246
247 /*
248 * Some compilers can't handle void casts.
249 */
250 #ifdef NOVOID
251 #define VOID /* Omit void casts */
252 #else /* NOVOID */
253 #define VOID (void) /* Quiet lint about ignored return values */
254 #endif /* NOVOID */
255
256 /*
257 * Adb is more palatable when static functions and variables are
258 * declared as globals. Lint gives more useful information when
259 * statics are truly static.
260 */
261 #ifdef lint
262 #define STATIC static /* Declare static variables for lint */
263 #else /* lint */
264 #define STATIC /* Make static variables global for adb */
265 #endif /* lint */
266
267 /*
268 * Simple types.
269 */
270 typedef struct group Group; /* Structure for getgrgid(3) */
271 typedef struct passwd Passwd; /* Structure for getpwuid(3) */
272 typedef struct tm Time; /* Structure for localtime(3) */
273
274 #ifdef S_IFLNK
275 /*
276 * File status with symbolic links. Kludged to hold symbolic
277 * link pathname within structure.
278 */
279 typedef struct
280 {
281 struct stat sb_stat;
282 char sb_link[PATHSIZE];
283 ino_t ino_orig; /* used in -o mode to support -ovv */
284 } Stat;
285
286 #define STAT(name, asb) stat(name, &(asb)->sb_stat)
287 #define FSTAT(fd, asb) fstat(fd, &(asb)->sb_stat)
288 #define LSTAT(name, asb) lstat(name, &(asb)->sb_stat)
289 #define sb_dev sb_stat.st_dev
290 #define sb_ino sb_stat.st_ino
291 #define sb_mode sb_stat.st_mode
292 #define sb_nlink sb_stat.st_nlink
293 #define sb_uid sb_stat.st_uid
294 #define sb_gid sb_stat.st_gid
295 #define sb_rdev sb_stat.st_rdev
296 #define sb_size sb_stat.st_size
297 #define sb_atime sb_stat.st_atime
298 #define sb_mtime sb_stat.st_mtime
299 #define sb_ctime sb_stat.st_ctime
300 #define sb_blksize sb_stat.st_blksize
301 #define sb_blocks sb_stat.st_blocks
302 #else /* !S_IFLNK */
303 /*
304 * File status without symbolic links.
305 */
306 typedef struct stat Stat;
307 #define STAT(name, asb) stat(name, asb)
308 #define FSTAT(fd, asb) fstat(fd, asb)
309 #define LSTAT(name, asb) stat(name, asb)
310 #define sb_dev st_dev
311 #define sb_ino st_ino
312 #define sb_mode st_mode
313 #define sb_nlink st_nlink
314 #define sb_uid st_uid
315 #define sb_gid st_gid
316 #define sb_rdev st_rdev
317 #define sb_size st_size
318 #define sb_atime st_atime
319 #define sb_mtime st_mtime
320 #define sb_ctime st_ctime
321 #endif /* !S_IFLNK */
322
323 /*
324 * Binary archive header (obsolete).
325 */
326 typedef struct
327 {
328 short b_dev; /* Device code */
329 ushort b_ino; /* Inode number */
330 ushort b_mode; /* Type and permissions */
331 ushort b_uid; /* Owner */
332 ushort b_gid; /* Group */
333 short b_nlink; /* Number of links */
334 short b_rdev; /* Real device */
335 ushort b_mtime[2]; /* Modification time (hi/lo) */
336 ushort b_name; /* Length of pathname (with null) */
337 ushort b_size[2]; /* Length of data */
338 } Binary;
339
340 /*
341 * Child process structure.
342 */
343 typedef struct child
344 {
345 struct child *c_forw; /* Forward link */
346 int c_pid; /* Process ID */
347 int c_flags; /* Flags (CF_) */
348 int c_status; /* Exit status */
349 } Child;
350
351 /*
352 * Child process flags (c_flags).
353 */
354 #define CF_EXIT (1<<0) /* Exited */
355
356 /*
357 * Hard link sources. One or more are chained from each link
358 * structure.
359 */
360 typedef struct name
361 {
362 struct name *p_forw; /* Forward chain (terminated) */
363 struct name *p_back; /* Backward chain (circular) */
364 char *p_name; /* Pathname to link from */
365 } Path;
366
367 /*
368 * File linking information. One entry exists for each unique
369 * file with with outstanding hard links.
370 */
371 typedef struct link
372 {
373 struct link *l_forw; /* Forward chain (terminated) */
374 struct link *l_back; /* Backward chain (terminated) */
375 dev_t l_dev; /* Device */
376 ino_t l_ino; /* Inode */
377 ino_t l_ino_ar; /* Inode nr we will put in the archive */
378 ushort l_nlink; /* Unresolved link count */
379 time_t l_mtime; /* Modification time */
380 ushort l_mode; /* mode */
381 off_t l_size; /* Length */
382 Path *l_path; /* Pathname(s) to link from */
383 } Link;
384
385 /*
386 * Directory information. One entry exists for each directory
387 * in order to update it with the correct timestamps.
388 */
389 typedef struct dir
390 {
391 struct dir *d_forw; /* Forward chain (terminated) */
392 time_t d_mtime; /* Modification time */
393 char *d_name; /* Pathname of directory */
394 } Dir;
395
396
397
398 /*
399 * Internal functions.
400 */
401 VOIDFN copyin (char **);
402 VOIDFN copyout (char **);
403 void compressfile (int *, char *, Stat *, int *);
404 int dirchg (char *, char *);
405 int dirmake (char *, Stat *);
406 int dirneed (char *);
407 void fatal (char *,char *);
408 void goodbye (int);
409 VOIDFN in (char **);
410 void inalloc (uint);
411 int inascii (char *, char *, Stat *);
412 int inascii2 (char *, char *, Stat *);
413 int inascii3 (char *, char *, Stat *);
414 int inavail (char **, uint*);
415 int inbinary (char *, char *, Stat *);
416 int indata (int, off_t, char*);
417 int inentry (char *, Stat *);
418 int infill (void);
419 int inhead (char *, Stat *);
420 int inread (char *, uint);
421 int inskip (off_t);
422 int inswab (char *, char *, Stat *);
423 int lineget (FILE *, char *, int);
424 void linkalso (Link *, char * );
425 Link *linkfrom (Stat *, int);
426 void linkleft (void);
427 Link *linkto (char *, Stat *);
428 #ifndef MEMCPY
429 char *memcpy (char *, char *, uint);
430 #endif
431 char *memget (uint);
432 char *memstr (char *);
433 #ifndef MKDIR
434 int mkdir (char *, ushort);
435 #endif
436 void nameadd (char *, int);
437 int namecmp (char *, Stat *);
438 int namecmp_ext (char *);
439 int nameopt (char *);
440 void next (int, char *);
441 int runpromptscript (char *);
442 void nextask (char *, char *, int);
443 void nextclos (void );
444 int nextopen (int);
445 int openin (char *, char *, Stat *, int *);
446 int openotty (char *, Stat *, Link *, int, int);
447 int openqtty (void);
448 int options (int, char **, char *);
449 VOIDFN out (char **);
450 void outalloc (size_t);
451 size_t outavail (char **);
452 int outdata (int, char*, off_t);
453
454 void outdatazip (int, char*, off_t); /* added KH */
455 void waitforgzip(void); /* added KH */
456 void outdatamem (char *, off_t); /* added KH */
457 void memreset(void); /* added KH */
458 int memread(char *buf,int count); /* added KH */
459 void memfree(void); /* added KH */
460 int nameaddfile(char *, int, int); /* added KH */
461
462 void outeof (char *, uint);
463 void outflush (int);
464 void outhead (char *, Stat *);
465 void outhead2 (char *, Stat *);
466 void outhead3 (char *, Stat *);
467 void outpad (off_t);
468 void outwait (void);
469 void outwrite (char *,uint);
470 VOIDFN pass (char **);
471 void passdata (char *, int, char*, int);
472 int passitem (char *, Stat *,int, char**);
473 int pipechld (int, int *);
474 int pipeopen (int );
475 void pipewait (void);
476 void prsize (FILE *, ulonglong);
477 VOIDFN readcheck (char **);
478 VOIDFN process_arname (char *);
479 #ifndef MKDIR
480 int rmdir (char *);
481 #endif
482 #if !defined (linux) && !defined(__FreeBSD__) && !defined(sun) && !defined(__CYGWIN32__)
483 VOIDFN (*signal ())();
484 #endif
485 ssize_t fswrite (int, char*, size_t);
486 char *syserr (void);
487 VOIDFN toc (char **);
488 void tocentry (char *, Stat *);
489 void tocmode (mode_t);
490 void usage (void);
491 void verify (int);
492 int warn (char *, char *);
493 int warn_nocount (char*, char *);
494 int warnarch (char *, off_t);
495 int writedisk (int);
496 int xfork (char *, int);
497 void xpause (void);
498 int xwait (int, char *, int);
499 void mail(char *who,int vol,char *archive);
500
501 ssize_t writeall(int, const char*, size_t);
502 int incheckentry(char *, Stat *);
503 int incheckdata (int fd, off_t size, char *name, Stat *asb, int comp);
504 Link * linkinode16 (dev_t dev, ino_t ino);
505 int opencontrolscript (char *name);
506
507 int openincheck(char *, Stat *, int *,int);
508 void mayberewind(void);
509 int fixinsecure (char *);
510
511 extern void add_arg(char *arg);
512 extern char *compress_arg_list[];
513
514 extern short lflag;
515 extern short hflag;
516
517 extern int gzipfactor;
518 extern off_t maxmem;
519 extern long compthreshold;
520 extern int ignoreslash;
521 extern short Zflag;
522 extern int arfd;
523 extern int extcasesens;
524
525 extern int forceZflag;
526 extern char *compressprog;
527 extern int compressargs;
528 extern int rewindfd;
529 extern char *ignorewarnings;
530
531 extern int readcompexts(char*);
532
533 ulonglong optsize (char *);
534 void update_aruntil(void);
535 extern ulonglong maxsizetocompress;
536 extern short noglob;
537 extern short flag0;