63 "Total files %d | Changed %d | Failed %d",
98 if (embedded_node_tree !=
nullptr) {
105 if (id_type ==
nullptr || id_type->
foreach_path ==
nullptr) {
132 const char *path_src;
135 if (absolute_base_path) {
138 path_src = path_src_buf;
147 if (bpath_data->
callback_function(bpath_data, path_dst,
sizeof(path_dst), path_src)) {
158 size_t path_dir_maxncpy,
160 size_t path_file_maxncpy)
167 BLI_path_join(path_src,
sizeof(path_src), path_dir, path_file);
172 if (absolute_base_path) {
177 bpath_data, path_dst,
sizeof(path_dst), (
const char *)path_src))
192 const char *path_src;
195 if (absolute_base_path) {
198 path_src = path_src_buf;
204 if (bpath_data->
callback_function(bpath_data, path_dst,
sizeof(path_dst), path_src)) {
223 const char *path_src)
233 "Path '%s' not found, from linked data-block '%s' (from library '%s')",
241 "Path '%s' not found, from local data-block '%s'",
248 reports,
RPT_WARNING,
"Path '%s' not found (no known owner data-block)", path_src);
258 path_data.
bmain = bmain;
276#define MAX_DIR_RECURSE 16
277#define FILESIZE_INVALID_DIRECTORY -1
295 const char *filename_src,
298 int *r_recurse_depth)
309 dir =
opendir(search_directory);
311 if (dir ==
nullptr) {
324 BLI_path_join(path,
sizeof(path), search_directory, de->d_name);
327 CLOG_WARN(&
LOG,
"Cannot get file status (`stat()`) of '%s'", path);
334 if ((
size > 0) && (
size > *r_filesize)) {
343 (*r_recurse_depth)++;
345 path, filename_src, r_filepath_new, r_filesize, r_recurse_depth);
346 (*r_recurse_depth)--;
364 size_t path_dst_maxncpy,
365 const char *path_src)
371 int recurse_depth = 0;
378 filepath_new[0] =
'\0';
386 "Could not open the directory '%s'",
390 if (is_found ==
false) {
393 "Could not find '%s' in '%s'",
403 BLI_strncpy(path_dst, filepath_new, path_dst_maxncpy);
408 const char *searchpath,
417 data.reports = reports;
418 data.searchdir = searchpath;
419 data.find_all = find_all;
422 path_data.
bmain = bmain;
429#undef MAX_DIR_RECURSE
430#undef FILESIZE_INVALID_DIRECTORY
448 size_t path_dst_maxncpy,
449 const char *path_src)
453 data->summary.count_total++;
464 data->summary.count_failed++;
474 data->summary.count_changed++;
479 const char *basedir_src,
480 const char *basedir_dst,
490 data.basedir_src = basedir_src;
491 data.basedir_dst = basedir_dst;
492 data.reports = reports;
495 path_data.
bmain = bmain;
502 *r_summary =
data.summary;
521 size_t path_dst_maxncpy,
522 const char *path_src)
526 data->summary.count_total++;
541 "Path '%s' cannot be made relative for %s '%s'",
545 data->summary.count_failed++;
549 BLI_strncpy(path_dst, path_test, path_dst_maxncpy);
550 data->summary.count_changed++;
556 size_t path_dst_maxncpy,
557 const char *path_src)
561 data->summary.count_total++;
575 "Path '%s' cannot be made absolute for %s '%s'",
579 data->summary.count_failed++;
583 BLI_strncpy(path_dst, path_test, path_dst_maxncpy);
584 data->summary.count_changed++;
598 if (basedir[0] ==
'\0') {
603 data.basedir = basedir;
604 data.reports = reports;
607 path_data.
bmain = bmain;
614 *r_summary =
data.summary;
652 const char *path_src)
655 size_t path_size = strlen(path_src) + 1;
661 char *filepath = path_store->
filepath;
663 memcpy(filepath, path_src, path_size);
670 size_t path_dst_maxncpy,
671 const char *path_src)
680 const char *filepath = path_store->
filepath;
681 bool is_path_changed =
false;
683 if (!
STREQ(path_src, filepath)) {
685 is_path_changed =
true;
689 return is_path_changed;
697 path_data.
bmain = bmain;
711 path_data.
bmain = bmain;
bool(*)(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) BPathForeachPathFunctionCallback
@ BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES
@ BKE_BPATH_FOREACH_PATH_SKIP_LINKED
@ BKE_BPATH_FOREACH_PATH_ABSOLUTE
@ BKE_BPATH_FOREACH_PATH_SKIP_PACKED
@ BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE
@ BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN
@ BKE_BPATH_FOREACH_PATH_RELOAD_EDITED
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
File and directory operations.
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_stat(const char *path, BLI_stat_t *buffer) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
void void void const char * BLI_path_basename(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
int BLI_path_normalize(char *path) ATTR_NONNULL(1)
#define BLI_path_join(...)
#define FILENAME_IS_CURRPAR(_n)
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
char * STRNCPY(char(&dst)[N], const char *src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
Compatibility-like things for windows.
struct dirent * readdir(DIR *dp)
DIR * opendir(const char *path)
#define CLOG_ERROR(clg_ref,...)
#define CLOG_WARN(clg_ref,...)
void DEG_id_tag_update(ID *id, unsigned int flags)
#define ID_IS_LINKED(_id)
#define ID_BLEND_PATH(_bmain, _id)
Read Guarded memory(de)allocation.
BMesh const char void * data
static bool bpath_list_restore(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src)
static bool missing_files_find_foreach_path_cb(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src)
static bool relative_convert_foreach_path_cb(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src)
bool BKE_bpath_foreach_path_dirfile_fixed_process(BPathForeachPathData *bpath_data, char *path_dir, size_t path_dir_maxncpy, char *path_file, size_t path_file_maxncpy)
static void bpath_absolute_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathForeachPathFunctionCallback callback_function, BPathSummary *r_summary)
void * BKE_bpath_list_backup(Main *bmain, const eBPathForeachFlag flag)
void BKE_bpath_summary_report(const BPathSummary &summary, ReportList *reports)
bool BKE_bpath_foreach_path_fixed_process(BPathForeachPathData *bpath_data, char *path, size_t path_maxncpy)
void BKE_bpath_relative_rebase(Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports, BPathSummary *r_summary)
void BKE_bpath_list_restore(Main *bmain, const eBPathForeachFlag flag, void *path_list_handle)
void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, ID *id)
void BKE_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary)
static bool absolute_convert_foreach_path_cb(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src)
static bool relative_rebase_foreach_path_cb(BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src)
void BKE_bpath_list_free(void *path_list_handle)
static bool check_missing_files_foreach_path_cb(BPathForeachPathData *bpath_data, char *, size_t, const char *path_src)
#define FILESIZE_INVALID_DIRECTORY
void BKE_bpath_missing_files_check(Main *bmain, ReportList *reports)
bool BKE_bpath_foreach_path_allocated_process(BPathForeachPathData *bpath_data, char **path)
static bool missing_files_find__recursive(const char *search_directory, const char *filename_src, char r_filepath_new[FILE_MAX], int64_t *r_filesize, int *r_recurse_depth)
void BKE_bpath_foreach_path_main(BPathForeachPathData *bpath_data)
static bool bpath_list_append(BPathForeachPathData *bpath_data, char *, size_t, const char *path_src)
void BKE_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary)
void BKE_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports, const bool find_all)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void * MEM_mallocN(size_t len, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
bNodeTree * node_tree_from_id(ID *id)
const char * absolute_base_path
BPathForeachPathFunctionCallback callback_function
IDTypeForeachPathFunction foreach_path
struct LibraryWeakReference * library_weak_reference
char library_filepath[1024]
LibraryRuntimeHandle * runtime