X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fcalcsize.c;h=1336d8d1e553c0296d04c3ec04444d9da719c3ab;hb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;hp=662dfd0807c6415b3f6fe18bc31804c72978c4a1;hpb=12179dea039515c06168c0037d048566a3f623de;p=debian%2Famanda diff --git a/client-src/calcsize.c b/client-src/calcsize.c index 662dfd0..1336d8d 100644 --- a/client-src/calcsize.c +++ b/client-src/calcsize.c @@ -32,7 +32,7 @@ * argv[1] is the config name or NOCONFIG */ #include "amanda.h" -#include "statfs.h" +#include "fsusage.h" #include "version.h" #include "sl.h" #include "util.h" @@ -128,6 +128,15 @@ main( char *d; int l, w; + /* + * Configure program for internationalization: + * 1) Only set the message locale for now. + * 2) Set textdomain for all amanda related programs to "amanda" + * We don't want to be forced to support dozens of message catalogs. + */ + setlocale(LC_MESSAGES, "C"); + textdomain("amanda"); + safe_fd(-1, 0); set_pname("calcsize"); @@ -138,27 +147,34 @@ main( signal(SIGPIPE, SIG_IGN); if (argc < 2) { - fprintf(stderr,"Usage: %s file[s]\n",argv[0]); + g_fprintf(stderr,_("Usage: %s file[s]\n"),argv[0]); return 1; } for(i=1; i 0) { amname = *argv; + qamname = quote_string(amname); argc--, argv++; } else { error("missing "); @@ -251,12 +268,12 @@ main( filename = stralloc(*argv); qfilename = quote_string(filename); if (access(filename, R_OK) != 0) { - fprintf(stderr,"Cannot open exclude file %s\n", qfilename); + g_fprintf(stderr,"Cannot open exclude file %s\n", qfilename); use_gtar_excl = use_star_excl = 0; } else { exclude_sl = calc_load_file(filename); if (!exclude_sl) { - fprintf(stderr,"Cannot open exclude file %s: %s\n", qfilename, + g_fprintf(stderr,"Cannot open exclude file %s: %s\n", qfilename, strerror(errno)); use_gtar_excl = use_star_excl = 0; } @@ -275,12 +292,12 @@ main( filename = stralloc(*argv); qfilename = quote_string(filename); if (access(filename, R_OK) != 0) { - fprintf(stderr,"Cannot open include file %s\n", qfilename); + g_fprintf(stderr,"Cannot open include file %s\n", qfilename); use_gtar_excl = use_star_excl = 0; } else { include_sl = calc_load_file(filename); if (!include_sl) { - fprintf(stderr,"Cannot open include file %s: %s\n", qfilename, + g_fprintf(stderr,"Cannot open include file %s: %s\n", qfilename, strerror(errno)); use_gtar_excl = use_star_excl = 0; } @@ -327,27 +344,17 @@ main( amflock(1, "size"); - if (fseek(stderr, 0L, SEEK_END) < 0) { - dbprintf(("calcsize: warning - seek failed: %s\n", - strerror(errno))); - } - - dbprintf(("calcsize: %s %d SIZE " OFF_T_FMT "\n", - amname, dumplevel[i], - (OFF_T_FMT_TYPE)final_size(i, dirname))); - fprintf(stderr, "%s %d SIZE " OFF_T_FMT "\n", - amname, dumplevel[i], - (OFF_T_FMT_TYPE)final_size(i, dirname)); + dbprintf("calcsize: %s %d SIZE %lld\n", + qamname, dumplevel[i], + (long long)final_size(i, dirname)); + g_fprintf(stderr, "%s %d SIZE %lld\n", + qamname, dumplevel[i], + (long long)final_size(i, dirname)); fflush(stderr); amfunlock(1, "size"); } - - malloc_size_2 = malloc_inuse(&malloc_hist_2); - - if(malloc_size_1 != malloc_size_2) { - malloc_list(fileno(stderr), malloc_hist_1, malloc_hist_2); - } + amfree(qamname); return 0; #endif @@ -397,6 +404,8 @@ traverse_dirs( has_exclude = !is_empty_sl(exclude_sl) && (use_gtar_excl || use_star_excl); aparent = vstralloc(parent_dir, "/", include, NULL); + /* We (may) need root privs for the *stat() calls here. */ + set_root_privs(1); if(stat(parent_dir, &finfo) != -1) parent_dev = finfo.st_dev; @@ -430,7 +439,7 @@ traverse_dirs( newname = newstralloc2(newname, newbase, f->d_name); if(lstat(newname, &finfo) == -1) { - fprintf(stderr, "%s/%s: %s\n", + g_fprintf(stderr, "%s/%s: %s\n", dirname, f->d_name, strerror(errno)); continue; } @@ -481,6 +490,10 @@ traverse_dirs( perror(dirname); #endif } + + /* drop root privs -- we're done with the permission-sensitive calls */ + set_root_privs(0); + amfree(newbase); amfree(newname); amfree(aparent); @@ -557,20 +570,20 @@ final_size_dump( int level, char * topdir) { - generic_fs_stats_t stats; + struct fs_usage fsusage; off_t mapsize; char *s; /* calculate the map sizes */ s = stralloc2(topdir, "/."); - if(get_fs_stats(s, &stats) == -1) { + if(get_fs_usage(s, NULL, &fsusage) == -1) { error("statfs %s: %s", s, strerror(errno)); /*NOTREACHED*/ } amfree(s); - mapsize = (stats.files + (off_t)7) / (off_t)8; /* in bytes */ + mapsize = (fsusage.fsu_files + (off_t)7) / (off_t)8; /* in bytes */ mapsize = (mapsize + (off_t)1023) / (off_t)1024; /* in kbytes */ /* the dump contains three maps plus the files */