2 * Test program for listing files during regression testing
8 Bacula® - The Network Backup Solution
10 Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
12 The main author of Bacula is Kern Sibbald, with contributions from
13 many others, a complete list can be found in the file AUTHORS.
14 This program is Free Software; you can redistribute it and/or
15 modify it under the terms of version two of the GNU General Public
16 License as published by the Free Software Foundation and included
19 This program is distributed in the hope that it will be useful, but
20 WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
29 Bacula® is a registered trademark of John Walker.
30 The licensor of Bacula is the Free Software Foundation Europe
31 (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
32 Switzerland, email:ftf@fsfeurope.org.
36 #include "findlib/find.h"
39 int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
40 int generate_job_event(JCR *jcr, const char *event) { return 1; }
43 /* Global variables */
49 static int print_file(FF_PKT *ff, void *pkt, bool);
50 static void print_ls_output(char *fname, char *link, int type, struct stat *statp);
56 "Usage: testls [-d debug_level] [-] [pattern1 ...]\n"
57 " -a print extended attributes (Win32 debug)\n"
58 " -d <nn> set debug level to <nn>\n"
59 " -dt print timestamp in debug output\n"
60 " -e specify file of exclude patterns\n"
61 " -i specify file of include patterns\n"
62 " - read pattern(s) from stdin\n"
63 " -? print this message.\n"
65 "Patterns are file inclusion -- normally directories.\n"
66 "Debug level >= 1 prints each file found.\n"
67 "Debug level >= 10 prints path/file for catalog.\n"
68 "Errors always printed.\n"
69 "Files/paths truncated is number with len > 255.\n"
70 "Truncation is only in catalog.\n"
78 main (int argc, char *const *argv)
82 int i, ch, hard_links;
87 setlocale(LC_ALL, "");
88 bindtextdomain("bacula", LOCALEDIR);
91 while ((ch = getopt(argc, argv, "ad:e:i:?")) != -1) {
93 case 'a': /* print extended attributes *debug* */
97 case 'd': /* set debug level */
101 debug_level = atoi(optarg);
102 if (debug_level <= 0) {
108 case 'e': /* exclude patterns */
112 case 'i': /* include patterns */
125 jcr = new_jcr(sizeof(JCR), NULL);
127 ff = init_find_files();
128 if (argc == 0 && !inc) {
129 add_fname_to_include_list(ff, 0, "/"); /* default to / */
131 for (i=0; i < argc; i++) {
132 if (strcmp(argv[i], "-") == 0) {
133 while (fgets(name, sizeof(name)-1, stdin)) {
134 strip_trailing_junk(name);
135 add_fname_to_include_list(ff, 0, name);
139 add_fname_to_include_list(ff, 0, argv[i]);
143 fd = fopen(inc, "rb");
145 printf(_("Could not open include file: %s\n"), inc);
148 while (fgets(name, sizeof(name)-1, fd)) {
149 strip_trailing_junk(name);
150 add_fname_to_include_list(ff, 0, name);
156 fd = fopen(exc, "rb");
158 printf(_("Could not open exclude file: %s\n"), exc);
161 while (fgets(name, sizeof(name)-1, fd)) {
162 strip_trailing_junk(name);
163 add_fname_to_exclude_list(ff, name);
167 match_files(jcr, ff, print_file, NULL);
168 term_include_exclude_files(ff);
169 hard_links = term_find_files(ff);
172 term_last_jobs_list(); /* free jcr chain */
178 static int print_file(FF_PKT *ff, void *pkt, bool top_level)
188 print_ls_output(ff->fname, ff->link, ff->type, &ff->statp);
193 printf(_("Err: Could not access %s: %s\n"), ff->fname, strerror(errno));
196 printf(_("Err: Could not follow ff->link %s: %s\n"), ff->fname, strerror(errno));
199 printf(_("Err: Could not stat %s: %s\n"), ff->fname, strerror(errno));
202 printf(_("Skip: File not saved. No change. %s\n"), ff->fname);
205 printf(_("Err: Attempt to backup archive. Not saved. %s\n"), ff->fname);
208 printf(_("Recursion turned off. Directory not entered. %s\n"), ff->fname);
211 printf(_("Skip: File system change prohibited. Directory not entered. %s\n"), ff->fname);
214 printf(_("Err: Could not open directory %s: %s\n"), ff->fname, strerror(errno));
217 printf(_("Err: Unknown file ff->type %d: %s\n"), ff->type, ff->fname);
223 static void print_ls_output(char *fname, char *link, int type, struct stat *statp)
230 if (type == FT_LNK) {
232 statp->st_mode |= 0777;
234 p = encode_mode(statp->st_mode, buf);
235 n = sprintf(p, " %2d ", (uint32_t)statp->st_nlink);
237 n = sprintf(p, "%-4d %-4d", (int)statp->st_uid, (int)statp->st_gid);
239 n = sprintf(p, "%7.7s ", edit_uint64(statp->st_size, ec1));
241 if (S_ISCHR(statp->st_mode) || S_ISBLK(statp->st_mode)) {
242 n = sprintf(p, "%4x ", (int)statp->st_rdev);
247 p = encode_time(statp->st_mtime, p);
250 for (f=fname; *f && (p-buf) < (int)sizeof(buf); )
252 if (type == FT_LNK) {
257 for (f=link; *f && (p-buf) < (int)sizeof(buf); )
265 bool python_set_prog(JCR*, char const*) { return false; }