#include "bacula.h"
#include "find.h"
-extern size_t name_max; /* filename max length */
-extern size_t path_max; /* path name max length */
+extern int32_t name_max; /* filename max length */
+extern int32_t path_max; /* path name max length */
/*
* Structure for keeping track of hard linked files, we
dev_t our_device = ff_pkt->statp.st_dev;
/*
- * If we are using Win32 backup API, don't check
+ * If we are using Win32 (non-portable) backup API, don't check
* access as everything is more complicated, and
* in principle, we should be able to access everything.
*/
- if (!is_win32_backup()) {
+ if (!have_win32_api() || (ff_pkt->flags & FO_PORTABLE)) {
if (access(fname, R_OK) == -1 && geteuid() != 0) {
/* Could not access() directory */
ff_pkt->type = FT_NOACCESS;
* during the restore, the directory permissions will
* be reset after all the files have been restored.
*/
+ Dmsg1(300, "Create temp ff packet for dir: %s\n", ff_pkt->fname);
FF_PKT *dir_ff_pkt = (FF_PKT *)bmalloc(sizeof(FF_PKT));
memcpy(dir_ff_pkt, ff_pkt, sizeof(FF_PKT));
dir_ff_pkt->fname = bstrdup(ff_pkt->fname);
dir_ff_pkt->link = bstrdup(ff_pkt->link);
dir_ff_pkt->sys_fname = get_pool_memory(PM_FNAME);
+ dir_ff_pkt->included_files_list = NULL;
+ dir_ff_pkt->excluded_files_list = NULL;
+ dir_ff_pkt->excluded_paths_list = NULL;
+ dir_ff_pkt->linklist = NULL;
ff_pkt->link = ff_pkt->fname; /* reset "link" */
if (status != 0 || result == NULL) {
break;
}
- ASSERT(name_max+1 > sizeof(struct dirent) + (int)NAMELEN(entry));
+ ASSERT(name_max+1 > (int)sizeof(struct dirent) + (int)NAMELEN(entry));
p = entry->d_name;
/* Skip `.', `..', and excluded file names. */
if (p[0] == '\0' || (p[0] == '.' && (p[1] == '\0' ||
* a block device, we do a raw backup of it or if it is
* a fifo, we simply read it.
*/
+#ifdef HAVE_FREEBSD_OS
+ /*
+ * On FreeBSD, all block devices are character devices, so
+ * to be able to read a raw disk, we need the check for
+ * a character device.
+ * crw-r----- 1 root operator - 116, 0x00040002 Jun 9 19:32 /dev/ad0s3
+ * crw-r----- 1 root operator - 116, 0x00040002 Jun 9 19:32 /dev/rad0s3
+ */
+ if (top_level && (S_ISBLK(ff_pkt->statp.st_mode) || S_ISCHR(ff_pkt->statp.st_mode))) {
+#else
if (top_level && S_ISBLK(ff_pkt->statp.st_mode)) {
+#endif
ff_pkt->type = FT_RAW; /* raw partition */
} else if (top_level && S_ISFIFO(ff_pkt->statp.st_mode) &&
ff_pkt->flags & FO_READFIFO) {