+dump_dumpfile_t(
+ const dumpfile_t *file)
+{
+ const char *pname = get_pname();
+
+ dbprintf(("%s: Contents of *(dumpfile_t *)%p:\n", pname, file));
+ dbprintf(("%s: type = %d (%s)\n", pname,
+ file->type, filetype2str(file->type)));
+ dbprintf(("%s: datestamp = '%s'\n", pname,
+ file->datestamp));
+ dbprintf(("%s: dumplevel = %d\n", pname, file->dumplevel));
+ dbprintf(("%s: compressed = %d\n", pname, file->compressed));
+ dbprintf(("%s: encrypted = %d\n", pname, file->encrypted));
+ dbprintf(("%s: comp_suffix = '%s'\n", pname,
+ file->comp_suffix));
+ dbprintf(("%s: encrypt_suffix = '%s'\n", pname,
+ file->encrypt_suffix));
+ dbprintf(("%s: name = '%s'\n", pname, file->name));
+ dbprintf(("%s: disk = '%s'\n", pname, file->disk));
+ dbprintf(("%s: program = '%s'\n", pname, file->program));
+ dbprintf(("%s: srvcompprog = '%s'\n", pname,
+ file->srvcompprog));
+ dbprintf(("%s: clntcompprog = '%s'\n", pname,
+ file->clntcompprog));
+ dbprintf(("%s: srv_encrypt = '%s'\n", pname,
+ file->srv_encrypt));
+ dbprintf(("%s: clnt_encrypt = '%s'\n", pname,
+ file->clnt_encrypt));
+ dbprintf(("%s: recover_cmd = '%s'\n", pname,
+ file->recover_cmd));
+ dbprintf(("%s: uncompress_cmd = '%s'\n", pname,
+ file->uncompress_cmd));
+ dbprintf(("%s: encrypt_cmd = '%s'\n", pname,
+ file->encrypt_cmd));
+ dbprintf(("%s: decrypt_cmd = '%s'\n", pname,
+ file->decrypt_cmd));
+ dbprintf(("%s: srv_decrypt_opt = '%s'\n", pname,
+ file->srv_decrypt_opt));
+ dbprintf(("%s: clnt_decrypt_opt = '%s'\n", pname,
+ file->clnt_decrypt_opt));
+ dbprintf(("%s: cont_filename = '%s'\n", pname,
+ file->cont_filename));
+ dbprintf(("%s: is_partial = %d\n", pname, file->is_partial));
+ dbprintf(("%s: partnum = %d\n", pname, file->partnum));
+ dbprintf(("%s: totalparts = %d\n", pname, file->totalparts));
+ dbprintf(("%s: blocksize = " SIZE_T_FMT "\n", pname,
+ (SIZE_T_FMT_TYPE)file->blocksize));
+}
+
+static void
+validate_name(
+ const char *name)
+{
+ if (strlen(name) == 0) {
+ error("Invalid name '%s'\n", name);
+ /*NOTREACHED*/
+ }
+}
+
+static void
+validate_datestamp(
+ const char *datestamp)
+{
+ if (strcmp(datestamp, "X") == 0) {
+ return;
+ }
+
+ if ((strlen(datestamp) == 8) && match("^[0-9]{8}$", datestamp)) {
+ return;
+ }
+ if ((strlen(datestamp) == 14) && match("^[0-9]{14}$", datestamp)) {
+ return;
+ }
+ error("Invalid datestamp '%s'\n", datestamp);
+ /*NOTREACHED*/
+}
+
+static void
+validate_parts(
+ const int partnum,
+ const int totalparts)
+{
+ if (partnum < 1) {
+ error("Invalid partnum (%d)\n", partnum);
+ /*NOTREACHED*/
+ }
+
+ if (partnum > totalparts && totalparts >= 0) {
+ error("Invalid partnum (%d) > totalparts (%d)\n",
+ partnum, totalparts);
+ /*NOTREACHED*/
+ }
+}
+
+void
+build_header(
+ char * buffer,
+ const dumpfile_t * file,
+ size_t buflen)