/* and go on to the next chunk if this wasn't cruft */
if (!is_cruft)
filename = stralloc(file.cont_filename);
+ dumpfile_free_data(&file);
}
amfree(filename);
holding_walk_file(hfile,
datap,
per_chunk_fn);
+ dumpfile_free_data(&dumpf);
}
closedir(dir);
{
holding_get_datap_t data;
data.result = NULL;
+ data.fullpaths = 1;
holding_walk_file(hfile, (gpointer)&data,
holding_get_walk_fn);
if (!holding_file_get_dumpfile((char *)file_elt->data, &file))
continue;
- if (file.type != F_DUMPFILE)
+ if (file.type != F_DUMPFILE) {
+ dumpfile_free_data(&file);
continue;
+ }
if (dateargs) {
date_matches = 0;
/* if no date list was provided, then all dates match */
date_matches = 1;
}
- if (!date_matches)
+ if (!date_matches) {
+ dumpfile_free_data(&file);
continue;
+ }
/* check that the hostname and disk are in the disklist */
dp = lookup_disk(file.name, file.disk);
if (dp == NULL) {
dbprintf(_("%s: disk %s:%s not in database, skipping it."),
(char *)file_elt->data, file.name, file.disk);
+ dumpfile_free_data(&file);
continue;
}
result_list = g_slist_insert_sorted(result_list,
stralloc(file_elt->data),
g_compare_strings);
+ dumpfile_free_data(&file);
}
if (file_list) g_slist_free_full(file_list);
stralloc(dfile.datestamp),
g_compare_strings);
}
+ dumpfile_free_data(&dfile);
}
g_slist_free_full(all_files);
/* stat the file for its size */
if (stat(filename, &finfo) == -1) {
dbprintf(_("stat %s: %s\n"), filename, strerror(errno));
- return (off_t)-1;
+ size = -1;
+ break;
}
size += (finfo.st_size+(off_t)1023)/(off_t)1024;
if (strip_headers)
/* get the header to look for cont_filename */
if (!holding_file_get_dumpfile(filename, &file)) {
dbprintf(_("holding_file_size: open of %s failed.\n"), filename);
- amfree(filename);
- return (off_t)-1;
+ size = -1;
+ break;
}
/* on to the next chunk */
filename = newstralloc(filename, file.cont_filename);
+ dumpfile_free_data(&file);
}
amfree(filename);
return size;
if((fd = robust_open(fname, O_RDONLY, 0)) == -1)
return 0;
- if(fullread(fd, buffer, SIZEOF(buffer)) != (ssize_t)sizeof(buffer)) {
+ if(full_read(fd, buffer, SIZEOF(buffer)) != sizeof(buffer)) {
aclose(fd);
return 0;
}
if (data->verbose_output)
g_fprintf(data->verbose_output,
_("Could not read read header from '%s'\n"), element);
+ dumpfile_free_data(&file);
return 0;
}
if (data->verbose_output)
g_fprintf(data->verbose_output,
_("File '%s' is not a dump file\n"), element);
+ dumpfile_free_data(&file);
return 0;
}
if (data->verbose_output)
g_fprintf(data->verbose_output,
_("File '%s' has invalid level %d\n"), element, file.dumplevel);
+ dumpfile_free_data(&file);
return 0;
}
g_fprintf(data->verbose_output,
_("File '%s' is for '%s:%s', which is not in the disklist\n"),
element, file.name, file.disk);
+ dumpfile_free_data(&file);
return 0;
}
amfree(destname);
}
+ dumpfile_free_data(&file);
return 1;
}
int complete)
{
int fd;
- ssize_t buflen;
+ size_t buflen;
char buffer[DISK_BLOCK_BYTES];
dumpfile_t file;
char *filename;
amfree(filename_tmp);
return 0;
}
- buflen = fullread(fd, buffer, SIZEOF(buffer));
+ buflen = full_read(fd, buffer, SIZEOF(buffer));
close(fd);
if(rename(filename_tmp, filename) != 0) {
if((fd = robust_open(filename, O_RDWR, 0)) == -1) {
dbprintf(_("rename_tmp_holdingX: open of %s failed: %s\n"),
filename, strerror(errno));
+ dumpfile_free_data(&file);
amfree(filename);
amfree(filename_tmp);
return 0;
}
file.is_partial = 1;
header = build_header(&file, DISK_BLOCK_BYTES);
- fullwrite(fd, header, DISK_BLOCK_BYTES);
+ if (full_write(fd, header, DISK_BLOCK_BYTES) != DISK_BLOCK_BYTES) {
+ dbprintf(_("rename_tmp_holding: writing new header failed: %s"),
+ strerror(errno));
+ dumpfile_free_data(&file);
+ amfree(filename);
+ amfree(filename_tmp);
+ close(fd);
+ return 0;
+ }
close(fd);
}
filename = newstralloc(filename, file.cont_filename);
+ dumpfile_free_data(&file);
}
amfree(filename);
amfree(filename_tmp);
return 1;
}
-void
-cleanup_holdingdisk(
- char * diskdir,
- int verbose)
-{
- DIR *topdir;
- struct dirent *workdir;
-
- if((topdir = opendir(diskdir)) == NULL) {
- if(verbose && errno != ENOENT)
- printf(_("Warning: could not open holding dir %s: %s\n"),
- diskdir, strerror(errno));
- return;
- }
-
- /* find all directories of the right format */
-
- if(verbose)
- printf(_("Scanning %s...\n"), diskdir);
- if ((chdir(diskdir)) == -1) {
- log_add(L_INFO, _("%s: could not chdir: %s"),
- diskdir, strerror(errno));
- }
- while((workdir = readdir(topdir)) != NULL) {
- if(strcmp(workdir->d_name, ".") == 0
- || strcmp(workdir->d_name, "..") == 0
- || strcmp(workdir->d_name, "lost+found") == 0)
- continue;
-
- if(verbose)
- printf(" %s: ", workdir->d_name);
- if(!is_dir(workdir->d_name)) {
- if(verbose)
- puts(_("skipping cruft file, perhaps you should delete it."));
- }
- else if(!is_datestr(workdir->d_name)) {
- if(verbose && (strcmp(workdir->d_name, "lost+found")!=0) )
- puts(_("skipping cruft directory, perhaps you should delete it."));
- }
- else if(rmdir(workdir->d_name) == 0) {
- if(verbose)
- puts(_("deleted empty Amanda directory."));
- }
- }
- closedir(topdir);
-}
-
int
mkholdingdir(