/*
- * Test program for listing files during regression testing
- */
-/*
- Copyright (C) 2000-2005 Kern Sibbald
+ Bacula® - The Network Backup Solution
+
+ Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version three of the GNU Affero General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as ammended with additional clauses defined in the
- file LICENSE in the main source directory.
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- the file LICENSE for additional details.
+ You should have received a copy of the GNU Affero General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+ Bacula® is a registered trademark of Kern Sibbald.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
+/*
+ * Test program for listing files during regression testing
+ * Links have their permissions and time bashed since they cannot
+ * be set by Bacula.
+ *
+ * Kern Sibbald, MM
+ *
*/
#include "bacula.h"
#include "findlib/find.h"
-#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
-int win32_client = 1;
-#else
-int win32_client = 0;
-#endif
-
/* Dummy functions */
int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
int generate_job_event(JCR *jcr, const char *event) { return 1; }
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) { }
/* Global variables */
int attrs = 0;
static JCR *jcr;
+static int num_files = 0;
-
-static int print_file(FF_PKT *ff, void *pkt, bool);
+static int print_file(JCR *jcr, FF_PKT *ff, bool);
static void print_ls_output(char *fname, char *link, int type, struct stat *statp);
+static int count_files(JCR *jcr, FF_PKT *ff, bool top_level);
static void usage()
{
"\n"
"Usage: testls [-d debug_level] [-] [pattern1 ...]\n"
" -a print extended attributes (Win32 debug)\n"
-" -dnn set debug level to nn\n"
+" -d <nn> set debug level to <nn>\n"
+" -dt print timestamp in debug output\n"
" -e specify file of exclude patterns\n"
" -i specify file of include patterns\n"
+" -q quiet, don't print filenames (debug)\n"
" - read pattern(s) from stdin\n"
" -? print this message.\n"
"\n"
}
-int
-main (int argc, char *const *argv)
+int main(int argc, char *const *argv)
{
FF_PKT *ff;
char name[1000];
+ bool quiet = false;
int i, ch, hard_links;
char *inc = NULL;
char *exc = NULL;
FILE *fd;
- while ((ch = getopt(argc, argv, "ad:e:i:?")) != -1) {
+ setlocale(LC_ALL, "");
+ bindtextdomain("bacula", LOCALEDIR);
+ textdomain("bacula");
+ lmgr_init_thread();
+
+ while ((ch = getopt(argc, argv, "ad:e:i:q?")) != -1) {
switch (ch) {
case 'a': /* print extended attributes *debug* */
attrs = 1;
break;
case 'd': /* set debug level */
- debug_level = atoi(optarg);
- if (debug_level <= 0) {
- debug_level = 1;
+ if (*optarg == 't') {
+ dbg_timestamp = true;
+ } else {
+ debug_level = atoi(optarg);
+ if (debug_level <= 0) {
+ debug_level = 1;
+ }
}
break;
inc = optarg;
break;
+ case 'q':
+ quiet = true;
+ break;
+
case '?':
default:
usage();
}
}
if (inc) {
- fd = fopen(inc, "r");
+ fd = fopen(inc, "rb");
if (!fd) {
- printf("Could not open include file: %s\n", inc);
+ printf(_("Could not open include file: %s\n"), inc);
exit(1);
}
while (fgets(name, sizeof(name)-1, fd)) {
}
if (exc) {
- fd = fopen(exc, "r");
+ fd = fopen(exc, "rb");
if (!fd) {
- printf("Could not open exclude file: %s\n", exc);
+ printf(_("Could not open exclude file: %s\n"), exc);
exit(1);
}
while (fgets(name, sizeof(name)-1, fd)) {
}
fclose(fd);
}
- match_files(jcr, ff, print_file, NULL);
+ if (quiet) {
+ match_files(jcr, ff, count_files);
+ } else {
+ match_files(jcr, ff, print_file);
+ }
+ printf(_("Files seen = %d\n"), num_files);
term_include_exclude_files(ff);
hard_links = term_find_files(ff);
free_jcr(jcr);
term_last_jobs_list(); /* free jcr chain */
close_memory_pool();
+ lmgr_cleanup_main();
sm_dump(false);
exit(0);
}
-static int print_file(FF_PKT *ff, void *pkt, bool top_level)
+static int count_files(JCR *jcr, FF_PKT *ff, bool top_level)
+{
+ num_files++;
+ return 1;
+}
+
+static int print_file(JCR *jcr, FF_PKT *ff, bool top_level)
{
switch (ff->type) {
printf(_("Err: Unknown file ff->type %d: %s\n"), ff->type, ff->fname);
break;
}
+ num_files++;
return 1;
}
static void print_ls_output(char *fname, char *link, int type, struct stat *statp)
{
- char buf[1000];
+ char buf[2000];
char ec1[30];
char *p, *f;
int n;
p += n;
n = sprintf(p, "%-4d %-4d", (int)statp->st_uid, (int)statp->st_gid);
p += n;
- n = sprintf(p, "%7.7s ", edit_uint64(statp->st_size, ec1));
+ n = sprintf(p, "%10.10s ", edit_uint64(statp->st_size, ec1));
p += n;
if (S_ISCHR(statp->st_mode) || S_ISBLK(statp->st_mode)) {
n = sprintf(p, "%4x ", (int)statp->st_rdev);