#include "fileheader.h"
#include "tapelist.h"
#include "amfeatures.h"
+#include "device.h"
#define CREAT_MODE 0640
-typedef struct match_list_s {
- char *hostname;
- char *diskname;
- char *datestamp;
- char *level;
- struct match_list_s *next;
-} match_list_t;
-
typedef struct rst_flags_s {
unsigned int inline_assemble:1;
unsigned int delay_assemble:1;
char *inventory_log;
} rst_flags_t;
+typedef struct {
+ enum { HOLDING_MODE, DEVICE_MODE} restore_mode;
+ dumpfile_t * header;
+ union {
+ int holding_fd;
+ Device * device;
+ } u;
+} RestoreSource;
+
+typedef struct seentapes_s seentapes_t;
+
char *make_filename(dumpfile_t *file);
-int disk_match(dumpfile_t *file, char *datestamp,
- char *hostname, char *diskname, char *level);
ssize_t read_file_header(dumpfile_t *file, int tapefd, int isafile,
rst_flags_t *flags);
-ssize_t restore(dumpfile_t *file, char *filename, int tapefd, int isafile,
- rst_flags_t *flags);
+void restore(RestoreSource * source, rst_flags_t * flags);
+gboolean restore_holding_disk(FILE * prompt_out,
+ rst_flags_t * flags,
+ am_feature_t * features,
+ tapelist_t * file,
+ seentapes_t ** seen,
+ GSList * dumpspecs,
+ dumpfile_t * this_header,
+ dumpfile_t * last_header);
+
+gboolean search_a_tape(Device * device, FILE *prompt_out, rst_flags_t *flags,
+ am_feature_t *their_features,
+ tapelist_t *desired_tape, GSList *dumpspecs,
+ seentapes_t **tape_seen,
+ dumpfile_t * first_restored_file, int tape_count,
+ FILE * logstream);
+
void flush_open_outputs(int reassemble, dumpfile_t *only_file);
-void search_tapes(FILE *prompt_out, int use_changer, tapelist_t *tapelist,
- match_list_t *restorethese, rst_flags_t *flags,
- am_feature_t *their_features);
+void search_tapes(FILE *prompt_out, FILE *prompt_in, int use_changer,
+ tapelist_t *tapelist, GSList *dumpspecs,
+ rst_flags_t *flags, am_feature_t *their_features);
int have_all_parts(dumpfile_t *file, int upto);
rst_flags_t *new_rst_flags(void);
int check_rst_flags(rst_flags_t *flags);
void free_rst_flags(rst_flags_t *flags);
-void free_match_list(match_list_t *match_list);
int lock_logfile(void);
void send_message(FILE *prompt_out, rst_flags_t *flags,
- am_feature_t *their_features, char * format, ...);
- /* __attribute__ ((format (printf, 4, 5))); */
-
+ am_feature_t *their_features,
+ char * format, ...) G_GNUC_PRINTF(4,5);
+gboolean set_restore_device_read_buffer_size(Device *device, rst_flags_t *flags);
#endif /* RESTORE_H */