Blender  V2.93
Classes | Macros | Variables
bpath.c File Reference
#include <sys/stat.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include "MEM_guardedalloc.h"
#include "DNA_brush_types.h"
#include "DNA_cachefile_types.h"
#include "DNA_fluid_types.h"
#include "DNA_freestyle_types.h"
#include "DNA_image_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_modifier_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_node_types.h"
#include "DNA_object_fluidsim_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_pointcache_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "DNA_sound_types.h"
#include "DNA_text_types.h"
#include "DNA_texture_types.h"
#include "DNA_vfont_types.h"
#include "DNA_volume_types.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
#include "BKE_font.h"
#include "BKE_image.h"
#include "BKE_lib_id.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_report.h"
#include "BKE_bpath.h"
#include "CLG_log.h"
#include "SEQ_iterator.h"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  BPathRebase_Data
 
struct  BPathRemap_Data
 
struct  BPathFind_Data
 
struct  PathStore
 

Macros

#define BPATH_TRAVERSE_POINTCACHE(ptcaches)
 

Functions

Check Missing Files
static bool checkMissingFiles_visit_cb (void *userdata, char *UNUSED(path_dst), const char *path_src)
 
void BKE_bpath_missing_files_check (Main *bmain, ReportList *reports)
 
Make Paths Absolute
static bool bpath_absolute_convert_visit_cb (void *userdata, char *path_dst, const char *path_src)
 
void BKE_bpath_absolute_convert (Main *bmain, const char *basedir, ReportList *reports)
 
Generic File Path Traversal API
static bool rewrite_path_fixed (char *path, BPathVisitor visit_cb, const char *absbase, void *userdata)
 
static bool rewrite_path_fixed_dirfile (char path_dir[FILE_MAXDIR], char path_file[FILE_MAXFILE], BPathVisitor visit_cb, const char *absbase, void *userdata)
 
static bool rewrite_path_alloc (char **path, BPathVisitor visit_cb, const char *absbase, void *userdata)
 
void BKE_bpath_traverse_id (Main *bmain, ID *id, BPathVisitor visit_cb, const int flag, void *bpath_user_data)
 
void BKE_bpath_traverse_id_list (Main *bmain, ListBase *lb, BPathVisitor visit_cb, const int flag, void *bpath_user_data)
 
void BKE_bpath_traverse_main (Main *bmain, BPathVisitor visit_cb, const int flag, void *bpath_user_data)
 
bool BKE_bpath_relocate_visitor (void *pathbase_v, char *path_dst, const char *path_src)
 
Backup/Restore/Free functions,
Note
These functions assume the data won't change order.
static bool bpath_list_append (void *userdata, char *UNUSED(path_dst), const char *path_src)
 
static bool bpath_list_restore (void *userdata, char *path_dst, const char *path_src)
 
void * BKE_bpath_list_backup (Main *bmain, const int flag)
 
void BKE_bpath_list_restore (Main *bmain, const int flag, void *ls_handle)
 
void BKE_bpath_list_free (void *ls_handle)
 

Variables

static CLG_LogRef LOG = {"bke.bpath"}
 

Find Missing Files

#define MAX_RECUR   16
 
typedef struct BPathFind_Data BPathFind_Data
 
static bool missing_files_find__recursive (char *filename_new, const char *dirname, const char *filename, int64_t *r_filesize, int *r_recur_depth)
 
static bool missing_files_find__visit_cb (void *userdata, char *path_dst, const char *path_src)
 
void BKE_bpath_missing_files_find (Main *bmain, const char *searchpath, ReportList *reports, const bool find_all)
 

Rebase Relative Paths

typedef struct BPathRebase_Data BPathRebase_Data
 
static bool bpath_relative_rebase_visit_cb (void *userdata, char *path_dst, const char *path_src)
 
void BKE_bpath_relative_rebase (Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports)
 

Make Paths Relative

typedef struct BPathRemap_Data BPathRemap_Data
 
static bool bpath_relative_convert_visit_cb (void *userdata, char *path_dst, const char *path_src)
 
void BKE_bpath_relative_convert (Main *bmain, const char *basedir, ReportList *reports)
 

Macro Definition Documentation

◆ BPATH_TRAVERSE_POINTCACHE

#define BPATH_TRAVERSE_POINTCACHE (   ptcaches)
Value:
{ \
PointCache *cache; \
for (cache = (ptcaches).first; cache; cache = cache->next) { \
if (cache->flag & PTCACHE_DISK_CACHE) { \
rewrite_path_fixed(cache->path, visit_cb, absbase, bpath_user_data); \
} \
} \
} \
(void)0
#define PTCACHE_DISK_CACHE

◆ MAX_RECUR

#define MAX_RECUR   16

find this file recursively, use the biggest file so thumbnails don't get used by mistake

Parameters
filename_newthe path will be copied here, caller must initialize as empty string.
dirnamesubdir to search
filenameset this filename
filesizefilesize for the file
Returns
found: 1/0.

Definition at line 314 of file bpath.c.

Typedef Documentation

◆ BPathFind_Data

◆ BPathRebase_Data

◆ BPathRemap_Data

Function Documentation

◆ BKE_bpath_absolute_convert()

void BKE_bpath_absolute_convert ( Main bmain,
const char *  basedir,
ReportList reports 
)

◆ BKE_bpath_list_backup()

void* BKE_bpath_list_backup ( Main bmain,
const int  flag 
)

Definition at line 873 of file bpath.c.

References BKE_bpath_traverse_main(), bpath_list_append(), and MEM_callocN.

Referenced by BKE_blendfile_write_partial(), and BLO_write_file().

◆ BKE_bpath_list_free()

void BKE_bpath_list_free ( void *  ls_handle)

Definition at line 889 of file bpath.c.

References BLI_assert, BLI_freelistN(), BLI_listbase_is_empty(), and MEM_freeN.

Referenced by BKE_blendfile_write_partial(), and BLO_write_file().

◆ BKE_bpath_list_restore()

void BKE_bpath_list_restore ( Main bmain,
const int  flag,
void *  ls_handle 
)

Definition at line 882 of file bpath.c.

References BKE_bpath_traverse_main(), and bpath_list_restore().

Referenced by BKE_blendfile_write_partial(), and BLO_write_file().

◆ BKE_bpath_missing_files_check()

void BKE_bpath_missing_files_check ( Main bmain,
ReportList reports 
)

◆ BKE_bpath_missing_files_find()

void BKE_bpath_missing_files_find ( Main bmain,
const char *  searchpath,
ReportList reports,
const bool  find_all 
)

◆ BKE_bpath_relative_convert()

void BKE_bpath_relative_convert ( Main bmain,
const char *  basedir,
ReportList reports 
)

◆ BKE_bpath_relative_rebase()

void BKE_bpath_relative_rebase ( Main bmain,
const char *  basedir_src,
const char *  basedir_dst,
ReportList reports 
)

◆ BKE_bpath_relocate_visitor()

bool BKE_bpath_relocate_visitor ( void *  pathbase_v,
char *  path_dst,
const char *  path_src 
)

Rewrites a relative path to be relative to the main file - unless the path is absolute, in which case it is not altered.

Definition at line 797 of file bpath.c.

References BLI_path_abs(), BLI_path_is_rel(), BLI_path_normalize(), BLI_path_rel(), BLI_strncpy(), CLOG_ERROR, FILE_MAX, FILE_MAXDIR, FILE_MAXFILE, and LOG.

Referenced by lib_id_library_local_paths().

◆ BKE_bpath_traverse_id()

void BKE_bpath_traverse_id ( Main bmain,
ID id,
BPathVisitor  visit_cb,
const int  flag,
void *  bpath_user_data 
)

Run visitor function 'visit' on all paths contained in 'id'.

Definition at line 540 of file bpath.c.

References BKE_BPATH_TRAVERSE_ABS, BKE_BPATH_TRAVERSE_RELOAD_EDITED, BKE_BPATH_TRAVERSE_SKIP_LIBRARY, BKE_BPATH_TRAVERSE_SKIP_MULTIFILE, BKE_BPATH_TRAVERSE_SKIP_PACKED, BKE_image_has_packedfile(), BKE_image_is_dirty(), BKE_image_signal(), BKE_library_filepath_set(), BKE_vfont_is_builtin(), BPATH_TRAVERSE_POINTCACHE, FluidDomainSettings::cache_directory, OceanModifierData::cachepath, Strip::dir, FluidModifierData::domain, Scene::ed, ELEM, eModifierType_Cloth, eModifierType_Fluid, eModifierType_Fluidsim, eModifierType_MeshCache, eModifierType_Ocean, CustomData::external, CustomDataExternal::filename, CacheFile::filepath, Image::filepath, MeshCacheModifierData::filepath, MovieClip::filepath, NodeShaderScript::filepath, NodeShaderTexIES::filepath, bSound::filepath, Volume::filepath, ListBase::first, FluidsimModifierData::fss, GS, Brush::icon_filepath, id, ID_BLEND_PATH, ID_BR, ID_CF, ID_IM, ID_IS_LINKED, ID_LI, ID_MA, ID_MC, ID_ME, ID_NT, ID_OB, ID_SCE, ID_SO, ID_TXT, ID_VF, ID_VO, IMA_SIGNAL_RELOAD, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE, IMA_SRC_TILED, Mesh::ldata, len, lib, MEM_allocN_len, MIN2, MOD_FLUID_TYPE_DOMAIN, Object::modifiers, StripElem::name, ID::name, ModifierData::next, ParticleSystem::next, node, bNodeTree::nodes, Material::nodetree, ntree, NTREE_SHADER, NULL, bSound::packedfile, VFont::packedfile, Volume::packedfile, Object::particlesystem, ClothModifierData::ptcaches, SoftBody_Shared::ptcaches, ParticleSystem::ptcaches, rewrite_path_alloc(), rewrite_path_fixed(), rewrite_path_fixed_dirfile(), scene, SEQ_ALL_BEGIN, SEQ_ALL_END, SEQ_HAS_PATH, SEQ_TYPE_IMAGE, SEQ_TYPE_MOVIE, SEQ_TYPE_SOUND_RAM, SH_NODE_SCRIPT, SH_NODE_TEX_IES, SoftBody::shared, Object::soft, Image::source, Sequence::strip, Strip::stripdata, FluidsimSettings::surfdataPath, ModifierData::type, FluidModifierData::type, bNodeTree::type, and Sequence::type.

Referenced by BKE_bpath_traverse_id_list(), and lib_id_library_local_paths().

◆ BKE_bpath_traverse_id_list()

void BKE_bpath_traverse_id_list ( Main bmain,
ListBase lb,
BPathVisitor  visit_cb,
const int  flag,
void *  bpath_user_data 
)

Definition at line 772 of file bpath.c.

References BKE_bpath_traverse_id(), ListBase::first, id, and ID::next.

Referenced by BKE_bpath_traverse_main().

◆ BKE_bpath_traverse_main()

void BKE_bpath_traverse_main ( Main bmain,
BPathVisitor  visit_cb,
const int  flag,
void *  bpath_user_data 
)

◆ bpath_absolute_convert_visit_cb()

static bool bpath_absolute_convert_visit_cb ( void *  userdata,
char *  path_dst,
const char *  path_src 
)
static

Definition at line 253 of file bpath.c.

References BKE_reportf(), BLI_path_abs(), BLI_path_is_rel(), data, and RPT_WARNING.

Referenced by BKE_bpath_absolute_convert().

◆ bpath_list_append()

static bool bpath_list_append ( void *  userdata,
char *  UNUSEDpath_dst,
const char *  path_src 
)
static

Definition at line 838 of file bpath.c.

References BLI_addtail(), and MEM_mallocN.

Referenced by BKE_bpath_list_backup().

◆ bpath_list_restore()

static bool bpath_list_restore ( void *  userdata,
char *  path_dst,
const char *  path_src 
)
static

Definition at line 851 of file bpath.c.

References BLI_freelinkN(), BLI_strncpy(), FILE_MAX, ListBase::first, ret, and STREQ.

Referenced by BKE_bpath_list_restore().

◆ bpath_relative_convert_visit_cb()

static bool bpath_relative_convert_visit_cb ( void *  userdata,
char *  path_dst,
const char *  path_src 
)
static

Definition at line 202 of file bpath.c.

References BKE_reportf(), BLI_path_is_rel(), BLI_path_rel(), data, and RPT_WARNING.

Referenced by BKE_bpath_relative_convert().

◆ bpath_relative_rebase_visit_cb()

static bool bpath_relative_rebase_visit_cb ( void *  userdata,
char *  path_dst,
const char *  path_src 
)
static

◆ checkMissingFiles_visit_cb()

static bool checkMissingFiles_visit_cb ( void *  userdata,
char *  UNUSEDpath_dst,
const char *  path_src 
)
static

Definition at line 93 of file bpath.c.

References BKE_reportf(), BLI_exists(), and RPT_WARNING.

Referenced by BKE_bpath_missing_files_check().

◆ missing_files_find__recursive()

static bool missing_files_find__recursive ( char *  filename_new,
const char *  dirname,
const char *  filename,
int64_t r_filesize,
int *  r_recur_depth 
)
static

◆ missing_files_find__visit_cb()

static bool missing_files_find__visit_cb ( void *  userdata,
char *  path_dst,
const char *  path_src 
)
static

◆ rewrite_path_alloc()

static bool rewrite_path_alloc ( char **  path,
BPathVisitor  visit_cb,
const char *  absbase,
void *  userdata 
)
static

Definition at line 510 of file bpath.c.

References BLI_path_abs(), BLI_strdup(), BLI_strncpy(), FILE_MAX, and MEM_freeN.

Referenced by BKE_bpath_traverse_id().

◆ rewrite_path_fixed()

static bool rewrite_path_fixed ( char *  path,
BPathVisitor  visit_cb,
const char *  absbase,
void *  userdata 
)
static

Run a visitor on a string, replacing the contents of the string as needed.

Definition at line 455 of file bpath.c.

References BLI_path_abs(), BLI_strncpy(), and FILE_MAX.

Referenced by BKE_bpath_traverse_id().

◆ rewrite_path_fixed_dirfile()

static bool rewrite_path_fixed_dirfile ( char  path_dir[FILE_MAXDIR],
char  path_file[FILE_MAXFILE],
BPathVisitor  visit_cb,
const char *  absbase,
void *  userdata 
)
static

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"bke.bpath"}
static