-/*
+/*
* Test program for find files
*/
-
/*
- Copyright (C) 2000-2003 Kern Sibbald and John Walker
+ Copyright (C) 2000-2005 Kern Sibbald
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.
+ modify it under the terms of the GNU General Public License
+ version 2 as amended 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.
-
- 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.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ the file LICENSE for additional details.
*/
#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; }
+
/* Global variables */
static int num_files = 0;
static int max_file_len = 0;
static JCR *jcr;
-static int print_file(FF_PKT *ff, void *pkt);
+static int print_file(FF_PKT *ff, void *pkt, bool);
static void count_files(FF_PKT *ff);
static void usage()
" - read pattern(s) from stdin\n"
" -? print this message.\n"
"\n"
-"Patterns are file inclusion -- normally directories.\n"
+"Patterns are used for file inclusion -- normally directories.\n"
"Debug level >= 1 prints each file found.\n"
"Debug level >= 10 prints path/file for catalog.\n"
-"Errors always printed.\n"
-"Files/paths truncated is number with len > 255.\n"
-"Truncation is only in catalog.\n"
+"Errors are always printed.\n"
+"Files/paths truncated is the number of files/paths with len > 255.\n"
+"Truncation is only in the catalog.\n"
"\n"));
exit(1);
while ((ch = getopt(argc, argv, "ad:e:i:?")) != -1) {
switch (ch) {
case 'a': /* print extended attributes *debug* */
- attrs = 1;
- break;
+ attrs = 1;
+ break;
case 'd': /* set debug level */
- debug_level = atoi(optarg);
- if (debug_level <= 0) {
- debug_level = 1;
- }
- break;
+ debug_level = atoi(optarg);
+ if (debug_level <= 0) {
+ debug_level = 1;
+ }
+ break;
case 'e': /* exclude patterns */
- exc = optarg;
- break;
+ exc = optarg;
+ break;
case 'i': /* include patterns */
- inc = optarg;
- break;
+ inc = optarg;
+ break;
case '?':
- default:
- usage();
+ 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");
if (!fd) {
printf("Could not open include file: %s\n", inc);
- exit(1);
+ 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);
}
fd = fopen(exc, "r");
if (!fd) {
printf("Could not open exclude file: %s\n", exc);
- exit(1);
+ 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, NULL);
+ term_include_exclude_files(ff);
hard_links = term_find_files(ff);
-
- printf(_("\
-Total files : %d\n\
-Max file length: %d\n\
-Max path length: %d\n\
-Files truncated: %d\n\
-Paths truncated: %d\n\
-Hard links : %d\n"),
+
+ printf(_(""
+"Total files : %d\n"
+"Max file length: %d\n"
+"Max path length: %d\n"
+"Files truncated: %d\n"
+"Paths truncated: %d\n"
+"Hard links : %d\n"),
num_files, max_file_len, max_path_len,
trunc_fname, trunc_path, hard_links);
-
+
free_jcr(jcr);
close_memory_pool();
- sm_dump(False);
+ sm_dump(false);
exit(0);
}
-static int print_file(FF_PKT *ff, void *pkt)
+static int print_file(FF_PKT *ff, void *pkt, bool top_level)
{
switch (ff->type) {
printf("Empty: %s\n", ff->fname);
}
count_files(ff);
- break;
+ break;
case FT_REG:
if (debug_level == 1) {
printf("%s\n", ff->fname);
}
count_files(ff);
break;
- case FT_DIR:
- if (debug_level == 1) {
- printf("%s\n", ff->fname);
- } else if (debug_level > 1) {
- printf("Dir: %s\n", ff->fname);
+ case FT_DIRBEGIN:
+ return 1;
+ case FT_NORECURSE:
+ case FT_NOFSCHG:
+ case FT_INVALIDFS:
+ case FT_DIREND:
+ if (debug_level) {
+ char errmsg[100] = "";
+ if (ff->type == FT_NORECURSE) {
+ bstrncpy(errmsg, "\t[will not descend: recursion turned off]", sizeof(errmsg));
+ } else if (ff->type == FT_NOFSCHG) {
+ bstrncpy(errmsg, "\t[will not descend: file system change not allowed]", sizeof(errmsg));
+ } else if (ff->type == FT_INVALIDFS) {
+ bstrncpy(errmsg, "\t[will not descend: disallowed file system]", sizeof(errmsg));
+ }
+ printf("%s%s%s\n", (debug_level > 1 ? "Dir: " : ""), ff->fname, errmsg);
}
+ ff->type = FT_DIREND;
count_files(ff);
break;
case FT_SPEC:
case FT_ISARCH:
printf(_("Err: Attempt to backup archive. Not saved. %s\n"), ff->fname);
break;
- case FT_NORECURSE:
- printf(_("Recursion turned off. Directory not entered. %s\n"), ff->fname);
- break;
- case FT_NOFSCHG:
- printf(_("Skip: File system change prohibited. Directory not entered. %s\n"), ff->fname);
- break;
case FT_NOOPEN:
printf(_("Err: Could not open directory %s: %s\n"), ff->fname, strerror(errno));
break;
return 1;
}
-static void count_files(FF_PKT *ar)
+static void count_files(FF_PKT *ar)
{
int fnl, pnl;
char *l, *p;
num_files++;
- /* Find path without the filename.
+ /* Find path without the filename.
* I.e. everything after the last / is a "filename".
* OK, maybe it is a directory name, but we treat it like
* a filename. If we don't find a / then the whole name
*/
for (p=l=ar->fname; *p; p++) {
if (*p == '/') {
- l = p; /* set pos of last slash */
+ l = p; /* set pos of last slash */
}
}
if (*l == '/') { /* did we find a slash? */
- l++; /* yes, point to filename */
- } else { /* no, whole thing must be path name */
+ l++; /* yes, point to filename */
+ } else { /* no, whole thing must be path name */
l = p;
}
/* If filename doesn't exist (i.e. root directory), we
- * simply create a blank name consisting of a single
+ * simply create a blank name consisting of a single
* space. This makes handling zero length filenames
* easier.
*/
trunc_fname++;
}
if (fnl > 0) {
- strncpy(file, l, fnl); /* copy filename */
+ strncpy(file, l, fnl); /* copy filename */
file[fnl] = 0;
} else {
file[0] = ' '; /* blank filename */
file[1] = 0;
}
- pnl = l - ar->fname;
+ pnl = l - ar->fname;
if (pnl > max_path_len) {
max_path_len = pnl;
}
}
}
+
+bool python_set_prog(JCR*, char const*) { return false; }