dump.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* Copyright 1996, 1998, 2000, 2002-2003 Sun Microsystems, Inc.
* All rights reserved.
* Use is subject to license terms.
*/
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
#ifndef _DUMP_H
#define _DUMP_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <string.h>
#include <syslog.h>
#include <errno.h>
#include <fcntl.h>
#include <utmpx.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include <setjmp.h>
#include <assert.h>
#include <dumpusg.h>
#include <kstat.h>
#include <sys/fssnap_if.h>
#include <libgen.h>
#include <limits.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SUPPORTS_MTB_TAPE_FORMAT
#include <protocols/dumprestore.h>
#include <memutils.h>
#include <note.h>
#define NI 16
#ifndef roundup
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
#endif
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
/*
* Define an overflow-free version of howmany so that we don't
* run into trouble with large files.
*/
#define d_howmany(x, y) ((x) / (y) + ((x) % (y) != 0))
/*
* All calculations done in 0.1" units!
*/
char *disk; /* name of the disk file */
int disk_dynamic; /* true if disk refers to dynamic storage */
char *tape; /* name of the tape file */
char *host; /* name of the remote tape host (may be "user@host") */
char *dumpdev; /* hostname:device for current volume */
char *sdumpdev; /* short form of dumpdev (no user name if remote) */
char *increm; /* name of file containing incremental information */
char *filesystem; /* name of the file system */
char *myname; /* argv[0] without leading path components */
char lastincno; /* increment number of previous dump */
char incno; /* increment number */
char *tlabel; /* what goes in tape header c_label field */
int uflag; /* update flag */
int fi; /* disk file descriptor */
int to; /* tape file descriptor */
int mapfd; /* block disk device descriptor for mmap */
int pipeout; /* true => output to standard output */
int tapeout; /* true => output to a tape drive */
int leftover; /* number of tape recs left over from prev vol */
int nsubdir; /* counts subdirs, for deciding to dump a dir */
int newtape; /* new tape flag */
int nadded; /* number of added sub directories */
int dadded; /* directory added flag */
int density; /* density in 0.1" units */
int tenthsperirg; /* 1/10" per tape inter-record gap */
int verify; /* verify each volume */
int doingverify; /* true => doing a verify pass */
int active; /* recopy active files */
int doingactive; /* true => redumping active files */
int archive; /* true => saving a archive in archivefile */
char *archivefile; /* name of archivefile */
int notify; /* notify operator flag */
int diskette; /* true if dumping to a diskette */
int cartridge; /* true if dumping to a cartridge tape */
int printsize; /* just print estimated size and exit */
int offline; /* take tape offline after rewinding */
int autoload; /* wait for next tape to autoload; implies offline */
int autoload_tries; /* number of times to check on autoload */
int autoload_period; /* seconds, tries*period = total wait time */
int doposition; /* move to specified... */
int dumpstate; /* dump output state (see below) */
int dumptoarchive; /* mark records to be archived */
int blockswritten; /* number of blocks written on current tape */
int shortmeta; /* current file has small amount of metadata */
char *debug_chdir; /* non-NULL means to mkdir this/pid, and chdir there, */
/* once for each separate child */
/*
* Defines for the msec part of
* inode-based times, since we're
* not part of the kernel.
*/
/*
* Dump output states
*/
#define DS_INIT 0
#define DS_START 1
#define DS_CLRI 2
#define DS_BITS 3
#define DS_DIRS 4
#define DS_FILES 5
#define DS_END 6
#define DS_DONE 7
/*
* Exit status codes
*/
#define X_FINOK 0 /* normal exit */
/*
* The contents of the file NINCREM are maintained both on
* a linked list and then (eventually) arrayified.
*/
struct idates {
char id_incno;
};
/*
* Function declarations
*/
#ifdef __STDC__
/*
*/
extern void mnttabread(void);
extern struct mntent *mnttabsearch(char *, int);
extern void setmnttab(void);
/*
*/
extern void inititimes(void);
extern void getitime(void);
extern void putitime(void);
extern time32_t is_fssnap_dump(char *);
/*
*/
extern void getlabel(void);
/*
*/
extern void child_chdir(void);
extern char *unrawname(char *);
extern void sigAbort(int);
extern char *rawname(char *);
extern char *lf_rawname(char *);
#ifdef signal
extern void (*nsignal(int, void (*)(int)))(int);
#endif
/*
*/
extern void allocino(void);
extern void freeino(void);
extern int lf_ismounted(char *, char *);
extern int lockfs(char *, char *);
extern void unmapfile(void);
extern void activepass(void);
/*
*/
extern int query(char *);
extern int query_once(char *, int);
extern void interrupt(int);
extern void broadcast(char *);
extern void timeest(int, int);
/*PRINTFLIKE1*/
extern void msg(const char *, ...);
/*PRINTFLIKE1*/
extern void msgtail(const char *, ...);
extern void lastdump(int);
extern char *getresponse(char *, char *);
/*
*/
extern void alloctape(void);
extern void reset(void);
extern void spclrec(void);
extern void flushcmds(void);
extern void flusht(void);
extern void nextdevice(void);
extern int isrewind(int);
extern void trewind(void);
extern void close_rewind(void);
extern void changevol(void);
extern void otape(int);
extern void dumpabort(void);
extern void dumpailing(void);
extern void Exit(int);
extern void positiontape(char *);
/*
*/
extern void active_mark(struct dinode *);
extern void freeshad();
extern void dumpblocks(ino_t);
/*
* lftw.c
*/
extern int lftw(const char *,
int (*)(const char *, const struct stat *, int), int);
extern int lf_lftw(const char *,
int (*)(const char *, const struct stat64 *, int), int);
/*
*/
extern void partial_check(void);
extern void lf_partial_check(void);
extern int partial_mark(int, char **);
/*
*/
#else /* !STDC */
/*
*/
extern void mnttabread();
extern struct mntent *mnttabsearch();
extern void setmnttab();
/*
*/
extern char *prdate();
extern void inititimes();
extern void getitime();
extern void putitime();
extern void est();
extern time32_t is_fssnap_dump();
extern void bmapest();
/*
*/
extern void getlabel();
/*
*/
extern void child_chdir();
extern char *unrawname();
extern void sigAbort();
extern char *rawname();
extern char *lf_rawname();
#ifdef signal
extern void nsignal();
#endif
extern int safe_file_open();
extern int safe_device_open();
extern FILE *safe_fopen();
/*
*/
extern void allocino();
extern void freeino();
extern void saveino();
extern void resetino();
extern long getigen();
extern int lf_ismounted();
extern int isoperator();
extern int openi();
extern void unmapfile();
extern void stattoi();
extern void dumpfile();
extern void activepass();
/*
*/
extern int query();
extern int query_once();
extern void interrupt();
extern void broadcast();
extern void timeest();
extern void msg();
extern void msgtail();
extern void lastdump();
extern char *getresponse();
/*
*/
extern void alloctape();
extern void reset();
extern void spclrec();
extern void taprec();
extern void dmpblk();
extern void toslave();
extern void doinode();
extern void dospcl();
extern void flushcmds();
extern void flusht();
extern void nextdevice();
extern int isrewind();
extern void trewind();
extern void close_rewind();
extern void changevol();
extern void otape();
extern void dumpabort();
extern void dumpailing();
extern void Exit();
extern void positiontape();
/*
*/
extern void pass();
extern void mark();
extern void active_mark();
extern void markshad();
extern void estshad();
extern void freeshad();
extern void add();
extern void dirdump();
extern void dump();
extern void lf_dump();
extern void dumpblocks();
extern void bitmap();
extern void bread();
extern int hasshortmeta();
/*
* lftw.c
*/
extern int lftw();
extern int lf_lftw();
/*
*/
extern void partial_check();
extern void lf_partial_check();
extern int partial_mark();
/*
*/
#endif /* __STDC__ */
/* Insufficiently-featureful system header files... */
#ifdef __cplusplus
}
#endif
#endif /* _DUMP_H */