2 Bacula® - The Network Backup Solution
4 Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
6 The main author of Bacula is Kern Sibbald, with contributions from
7 many others, a complete list can be found in the file AUTHORS.
8 This program is Free Software; you can redistribute it and/or
9 modify it under the terms of version two of the GNU General Public
10 License as published by the Free Software Foundation and included
13 This program is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 Bacula® is a registered trademark of Kern Sibbald.
24 The licensor of Bacula is the Free Software Foundation Europe
25 (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26 Switzerland, email:ftf@fsfeurope.org.
29 * Test program for listing files during regression testing
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; }
41 void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) { }
44 /* Global variables */
50 static int print_file(JCR *jcr, FF_PKT *ff, bool);
51 static void print_ls_output(char *fname, char *link, int type, struct stat *statp);
57 "Usage: testls [-d debug_level] [-] [pattern1 ...]\n"
58 " -a print extended attributes (Win32 debug)\n"
59 " -d <nn> set debug level to <nn>\n"
60 " -dt print timestamp in debug output\n"
61 " -e specify file of exclude patterns\n"
62 " -i specify file of include patterns\n"
63 " - read pattern(s) from stdin\n"
64 " -? print this message.\n"
66 "Patterns are file inclusion -- normally directories.\n"
67 "Debug level >= 1 prints each file found.\n"
68 "Debug level >= 10 prints path/file for catalog.\n"
69 "Errors always printed.\n"
70 "Files/paths truncated is number with len > 255.\n"
71 "Truncation is only in catalog.\n"
79 main (int argc, char *const *argv)
83 int i, ch, hard_links;
88 setlocale(LC_ALL, "");
89 bindtextdomain("bacula", LOCALEDIR);
93 while ((ch = getopt(argc, argv, "ad:e:i:?")) != -1) {
95 case 'a': /* print extended attributes *debug* */
99 case 'd': /* set debug level */
100 if (*optarg == 't') {
101 dbg_timestamp = true;
103 debug_level = atoi(optarg);
104 if (debug_level <= 0) {
110 case 'e': /* exclude patterns */
114 case 'i': /* include patterns */
127 jcr = new_jcr(sizeof(JCR), NULL);
129 ff = init_find_files();
130 if (argc == 0 && !inc) {
131 add_fname_to_include_list(ff, 0, "/"); /* default to / */
133 for (i=0; i < argc; i++) {
134 if (strcmp(argv[i], "-") == 0) {
135 while (fgets(name, sizeof(name)-1, stdin)) {
136 strip_trailing_junk(name);
137 add_fname_to_include_list(ff, 0, name);
141 add_fname_to_include_list(ff, 0, argv[i]);
145 fd = fopen(inc, "rb");
147 printf(_("Could not open include file: %s\n"), inc);
150 while (fgets(name, sizeof(name)-1, fd)) {
151 strip_trailing_junk(name);
152 add_fname_to_include_list(ff, 0, name);
158 fd = fopen(exc, "rb");
160 printf(_("Could not open exclude file: %s\n"), exc);
163 while (fgets(name, sizeof(name)-1, fd)) {
164 strip_trailing_junk(name);
165 add_fname_to_exclude_list(ff, name);
169 match_files(jcr, ff, print_file);
170 term_include_exclude_files(ff);
171 hard_links = term_find_files(ff);
174 term_last_jobs_list(); /* free jcr chain */
180 static int print_file(JCR *jcr, FF_PKT *ff, bool top_level)
190 print_ls_output(ff->fname, ff->link, ff->type, &ff->statp);
195 printf(_("Err: Could not access %s: %s\n"), ff->fname, strerror(errno));
198 printf(_("Err: Could not follow ff->link %s: %s\n"), ff->fname, strerror(errno));
201 printf(_("Err: Could not stat %s: %s\n"), ff->fname, strerror(errno));
204 printf(_("Skip: File not saved. No change. %s\n"), ff->fname);
207 printf(_("Err: Attempt to backup archive. Not saved. %s\n"), ff->fname);
210 printf(_("Recursion turned off. Directory not entered. %s\n"), ff->fname);
213 printf(_("Skip: File system change prohibited. Directory not entered. %s\n"), ff->fname);
216 printf(_("Err: Could not open directory %s: %s\n"), ff->fname, strerror(errno));
219 printf(_("Err: Unknown file ff->type %d: %s\n"), ff->type, ff->fname);
225 static void print_ls_output(char *fname, char *link, int type, struct stat *statp)
232 if (type == FT_LNK) {
234 statp->st_mode |= 0777;
236 p = encode_mode(statp->st_mode, buf);
237 n = sprintf(p, " %2d ", (uint32_t)statp->st_nlink);
239 n = sprintf(p, "%-4d %-4d", (int)statp->st_uid, (int)statp->st_gid);
241 n = sprintf(p, "%7.7s ", edit_uint64(statp->st_size, ec1));
243 if (S_ISCHR(statp->st_mode) || S_ISBLK(statp->st_mode)) {
244 n = sprintf(p, "%4x ", (int)statp->st_rdev);
249 p = encode_time(statp->st_mtime, p);
252 for (f=fname; *f && (p-buf) < (int)sizeof(buf); )
254 if (type == FT_LNK) {
259 for (f=link; *f && (p-buf) < (int)sizeof(buf); )
267 bool python_set_prog(JCR*, char const*) { return false; }