-/*
- * Test program for listing files during regression testing
- */
-
/*
- Copyright (C) 2000-2003 Kern Sibbald and John Walker
+ Bacula® - The Network Backup Solution
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
+ Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 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 two of the GNU General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
+
+ 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.
- You should have received a copy of the GNU General Public
- License along with this program; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
+ You should have received a copy of the GNU 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 John Walker.
+ 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
+ *
+ * Kern Sibbald, MM
+ *
*/
#include "bacula.h"
#include "findlib/find.h"
+/* 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 print_file(FF_PKT *ff, void *pkt);
+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 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"
" - read pattern(s) from stdin\n"
char *exc = NULL;
FILE *fd;
+ setlocale(LC_ALL, "");
+ bindtextdomain("bacula", LOCALEDIR);
+ textdomain("bacula");
+
while ((ch = getopt(argc, argv, "ad:e:i:?")) != -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;
- }
- break;
-
- case 'e': /* exclude patterns */
- exc = optarg;
- break;
-
- case 'i': /* include patterns */
- inc = optarg;
- break;
-
- case '?':
- default:
- usage();
-
- }
+ case 'a': /* print extended attributes *debug* */
+ attrs = 1;
+ break;
+
+ case 'd': /* set debug level */
+ if (*optarg == 't') {
+ dbg_timestamp = true;
+ } else {
+ debug_level = atoi(optarg);
+ if (debug_level <= 0) {
+ debug_level = 1;
+ }
+ }
+ break;
+
+ case 'e': /* exclude patterns */
+ exc = optarg;
+ break;
+
+ case 'i': /* include patterns */
+ inc = optarg;
+ break;
+
+ case '?':
+ default:
+ usage();
+
+ }
}
argc -= optind;
argv += optind;
ff = init_find_files();
if (argc == 0 && !inc) {
add_fname_to_include_list(ff, 0, "/"); /* default to / */
- } else {
+ } else {
for (i=0; i < argc; i++) {
if (strcmp(argv[i], "-") == 0) {
- while (fgets(name, sizeof(name)-1, stdin)) {
- strip_trailing_junk(name);
- add_fname_to_include_list(ff, 0, name);
- }
- continue;
- }
- add_fname_to_include_list(ff, 0, argv[i]);
+ while (fgets(name, sizeof(name)-1, stdin)) {
+ strip_trailing_junk(name);
+ add_fname_to_include_list(ff, 0, name);
+ }
+ continue;
+ }
+ add_fname_to_include_list(ff, 0, argv[i]);
}
}
if (inc) {
- fd = fopen(inc, "r");
+ fd = fopen(inc, "rb");
if (!fd) {
- printf("Could not open include file: %s\n", inc);
- exit(1);
+ printf(_("Could not open include file: %s\n"), inc);
+ exit(1);
}
while (fgets(name, sizeof(name)-1, fd)) {
- strip_trailing_junk(name);
- add_fname_to_include_list(ff, 0, name);
+ strip_trailing_junk(name);
+ add_fname_to_include_list(ff, 0, name);
}
fclose(fd);
}
if (exc) {
- fd = fopen(exc, "r");
+ fd = fopen(exc, "rb");
if (!fd) {
- printf("Could not open exclude file: %s\n", exc);
- exit(1);
+ printf(_("Could not open exclude file: %s\n"), exc);
+ exit(1);
}
while (fgets(name, sizeof(name)-1, fd)) {
- strip_trailing_junk(name);
- add_fname_to_exclude_list(ff, name);
+ strip_trailing_junk(name);
+ add_fname_to_exclude_list(ff, name);
}
fclose(fd);
}
- find_files(jcr, ff, print_file, NULL);
+ match_files(jcr, ff, print_file);
+ term_include_exclude_files(ff);
hard_links = term_find_files(ff);
-
+
free_jcr(jcr);
+ term_last_jobs_list(); /* free jcr chain */
close_memory_pool();
- sm_dump(False);
+ sm_dump(false);
exit(0);
}
-static int print_file(FF_PKT *ff, void *pkt)
+static int print_file(JCR *jcr, FF_PKT *ff, bool top_level)
{
switch (ff->type) {
case FT_REGE:
case FT_REG:
case FT_LNK:
- case FT_DIR:
+ case FT_DIREND:
case FT_SPEC:
print_ls_output(ff->fname, ff->link, ff->type, &ff->statp);
break;
+ case FT_DIRBEGIN:
+ break;
case FT_NOACCESS:
printf(_("Err: Could not access %s: %s\n"), ff->fname, strerror(errno));
break;
static void print_ls_output(char *fname, char *link, int type, struct stat *statp)
{
- char buf[1000];
+ char buf[1000];
char ec1[30];
char *p, *f;
int n;
+ if (type == FT_LNK) {
+ statp->st_mtime = 0;
+ statp->st_mode |= 0777;
+ }
p = encode_mode(statp->st_mode, buf);
n = sprintf(p, " %2d ", (uint32_t)statp->st_nlink);
p += n;
p += n;
if (S_ISCHR(statp->st_mode) || S_ISBLK(statp->st_mode)) {
n = sprintf(p, "%4x ", (int)statp->st_rdev);
- } else {
+ } else {
n = sprintf(p, " ");
}
p += n;
- if (type != FT_LNK) {
- p = encode_time(statp->st_mtime, p);
- } else {
- p = encode_time(0, p);
- }
+ p = encode_time(statp->st_mtime, p);
*p++ = ' ';
/* Copy file name */
for (f=fname; *f && (p-buf) < (int)sizeof(buf); )
*p++ = ' ';
/* Copy link name */
for (f=link; *f && (p-buf) < (int)sizeof(buf); )
- *p++ = *f++;
+ *p++ = *f++;
}
*p++ = '\n';
*p = 0;
fputs(buf, stdout);
}
+
+bool python_set_prog(JCR*, char const*) { return false; }