Blender V2.61 - r43446
Defines | Functions | Variables

path_util.c File Reference

#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
#include "BLI_fileops.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_utildefines.h"
#include "BKE_utildefines.h"
#include "BKE_blender.h"
#include "GHOST_Path-api.h"
#include <fnmatch.h>

Go to the source code of this file.

Defines

#define _GNU_SOURCE
#define BLENDER_USER_FORMAT   "%s/.blender/%s"
#define BLENDER_SYSTEM_FORMAT   "%s/blender/%s"
#define UNIQUE_NAME_MAX   128
#define GIVE_STRADDR(data, offset)   ( ((char *)data) + offset )

Functions

static int add_win32_extension (char *name)
static char * blender_version_decimal (const int ver)
int BLI_stringdec (const char *string, char *head, char *tail, unsigned short *numlen)
void BLI_stringenc (char *string, const char *head, const char *tail, unsigned short numlen, int pic)
int BLI_split_name_num (char *left, int *nr, const char *name, const char delim)
void BLI_newname (char *name, int add)
int BLI_uniquename_cb (int(*unique_check)(void *, const char *), void *arg, const char defname[], char delim, char *name, short name_len)
static int uniquename_find_dupe (ListBase *list, void *vlink, const char *name, short name_offs)
static int uniquename_unique_check (void *arg, const char *name)
void BLI_uniquename (ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short name_len)
void BLI_cleanup_path (const char *relabase, char *dir)
void BLI_cleanup_dir (const char *relabase, char *dir)
void BLI_cleanup_file (const char *relabase, char *dir)
void BLI_path_rel (char *file, const char *relfile)
int BLI_has_parent (char *path)
int BLI_parent_dir (char *path)
static int stringframe_chars (char *path, int *char_start, int *char_end)
static void ensure_digits (char *path, int digits)
int BLI_path_frame (char *path, int frame, int digits)
int BLI_path_frame_range (char *path, int sta, int end, int digits)
int BLI_path_abs (char *path, const char *basepath)
int BLI_path_cwd (char *path)
void BLI_splitdirstring (char *di, char *fi)
void BLI_getlastdir (const char *dir, char *last, const size_t maxlen)
const char * BLI_getDefaultDocumentFolder (void)
static int test_path (char *targetpath, const char *path_base, const char *path_sep, const char *folder_name)
static int test_env_path (char *path, const char *envvar)
static int get_path_local (char *targetpath, const char *folder_name, const char *subfolder_name, const int ver)
static int is_portable_install (void)
static int get_path_user (char *targetpath, const char *folder_name, const char *subfolder_name, const char *envvar, const int ver)
static int get_path_system (char *targetpath, const char *folder_name, const char *subfolder_name, const char *envvar, const int ver)
char * BLI_get_folder (int folder_id, const char *subfolder)
char * BLI_get_user_folder_notest (int folder_id, const char *subfolder)
char * BLI_get_folder_create (int folder_id, const char *subfolder)
char * BLI_get_folder_version (const int id, const int ver, const int do_check)
void BLI_setenv (const char *env, const char *val)
void BLI_setenv_if_new (const char *env, const char *val)
void BLI_clean (char *path)
void BLI_char_switch (char *string, char from, char to)
void BLI_make_exist (char *dir)
void BLI_make_existing_file (const char *name)
void BLI_make_file_string (const char *relabase, char *string, const char *dir, const char *file)
int BLI_testextensie (const char *str, const char *ext)
int BLI_testextensie_array (const char *str, const char **ext_array)
int BLI_testextensie_glob (const char *str, const char *ext_fnmatch)
int BLI_replace_extension (char *path, size_t maxlen, const char *ext)
int BLI_ensure_extension (char *path, size_t maxlen, const char *ext)
void BLI_split_dirfile (const char *string, char *dir, char *file, const size_t dirlen, const size_t filelen)
void BLI_split_dir_part (const char *string, char *dir, const size_t dirlen)
void BLI_split_file_part (const char *string, char *file, const size_t filelen)
void BLI_join_dirfile (char *dst, const size_t maxlen, const char *dir, const char *file)
char * BLI_path_basename (char *path)
int BKE_rebase_path (char *abs, size_t abs_len, char *rel, size_t rel_len, const char *base_dir, const char *src_dir, const char *dest_dir)
char * BLI_first_slash (char *string)
char * BLI_last_slash (const char *string)
int BLI_add_slash (char *string)
void BLI_del_slash (char *string)
static void bli_where_am_i (char *fullname, const size_t maxlen, const char *name)
void BLI_init_program_path (const char *argv0)
const char * BLI_program_path (void)
const char * BLI_program_dir (void)
static void BLI_where_is_temp (char *fullname, const size_t maxlen, char *userdir)
void BLI_init_temporary_dir (char *userdir)
const char * BLI_temporary_dir (void)
void BLI_system_temporary_dir (char *dir)

Variables

static char bprogname [FILE_MAX]
static char bprogdir [FILE_MAX]
static char btempdir [FILE_MAX]

Detailed Description

Definition in file path_util.c.


Define Documentation

#define _GNU_SOURCE

Definition at line 59 of file path_util.c.

#define BLENDER_SYSTEM_FORMAT   "%s/blender/%s"

Definition at line 92 of file path_util.c.

Referenced by get_path_system().

#define BLENDER_USER_FORMAT   "%s/.blender/%s"

Definition at line 88 of file path_util.c.

Referenced by get_path_user().

#define GIVE_STRADDR (   data,
  offset 
)    ( ((char *)data) + offset )

Definition at line 256 of file path_util.c.

Referenced by BLI_uniquename(), and uniquename_find_dupe().

#define UNIQUE_NAME_MAX   128

Definition at line 96 of file path_util.c.

Referenced by BLI_newname(), BLI_uniquename(), and BLI_uniquename_cb().


Function Documentation

static int add_win32_extension ( char *  name) [static]

Definition at line 1702 of file path_util.c.

References BLI_exists(), and FILE_MAX.

Referenced by bli_where_am_i().

int BKE_rebase_path ( char *  abs,
size_t  abs_len,
char *  rel,
size_t  rel_len,
const char *  base_dir,
const char *  src_dir,
const char *  dest_dir 
)
static char * blender_version_decimal ( const int  ver) [static]

Definition at line 856 of file path_util.c.

Referenced by get_path_local(), get_path_system(), and get_path_user().

int BLI_add_slash ( char *  string)
void BLI_char_switch ( char *  string,
char  from,
char  to 
)

Change every from in string into to. The result will be in string

string The string to work on from The character to replace to The character to replace with

Definition at line 1222 of file path_util.c.

References NULL.

Referenced by BLI_clean(), BLI_make_exist(), BLI_path_abs(), BLI_path_rel(), and uri_from_filename().

void BLI_clean ( char *  path)
void BLI_cleanup_dir ( const char *  relabase,
char *  dir 
)
void BLI_cleanup_file ( const char *  relabase,
char *  dir 
)

dir can be any input, like from buttons, and this function converts it to a regular full path. Also removes garbage from directory paths, like /../ or double slashes etc

Definition at line 420 of file path_util.c.

References BLI_cleanup_path(), and BLI_del_slash().

Referenced by bpath_relocate_visitor().

void BLI_cleanup_path ( const char *  relabase,
char *  dir 
)

Definition at line 318 of file path_util.c.

References BLI_path_abs(), and strlen().

Referenced by BLI_cleanup_dir(), BLI_cleanup_file(), BLI_path_abs(), and BLI_path_rel().

void BLI_del_slash ( char *  string)

Definition at line 1689 of file path_util.c.

References len(), SEP, and strlen().

Referenced by BLI_cleanup_file(), and file_panel_category().

int BLI_ensure_extension ( char *  path,
size_t  maxlen,
const char *  ext 
)

Definition at line 1441 of file path_util.c.

References strlen().

Referenced by BKE_add_image_extension(), and blend_save_check().

char* BLI_first_slash ( char *  string)

Definition at line 1648 of file path_util.c.

char* BLI_get_folder ( int  folder_id,
const char *  subfolder 
)
char* BLI_get_folder_create ( int  folder_id,
const char *  subfolder 
)
char* BLI_get_folder_version ( const int  id,
const int  ver,
const int  do_check 
)
char* BLI_get_user_folder_notest ( int  folder_id,
const char *  subfolder 
)
const char* BLI_getDefaultDocumentFolder ( void  )

Definition at line 809 of file path_util.c.

References BLI_is_dir(), HRESULT, NULL, and S_OK.

Referenced by file_expand_directory().

void BLI_getlastdir ( const char *  dir,
char *  last,
const size_t  maxlen 
)

Definition at line 787 of file path_util.c.

References BLI_strncpy(), and NULL.

Referenced by file_panel_category().

int BLI_has_parent ( char *  path)

Definition at line 524 of file path_util.c.

References BLI_add_slash(), BLI_clean(), and len().

Referenced by file_parent_exec().

void BLI_init_program_path ( const char *  argv0)

Definition at line 1835 of file path_util.c.

References BLI_split_dir_part(), bli_where_am_i(), bprogdir, and bprogname.

Referenced by main().

void BLI_init_temporary_dir ( char *  userdir)

Definition at line 1906 of file path_util.c.

References BLI_where_is_temp(), btempdir, and FILE_MAX.

Referenced by main(), and wm_init_userdef().

void BLI_join_dirfile ( char *  dst,
const size_t  maxlen,
const char *  dir,
const char *  file 
)
char* BLI_last_slash ( const char *  string)
void BLI_make_exist ( char *  dir)

Definition at line 1231 of file path_util.c.

References ALTSEP, BLI_char_switch(), BLI_is_dir(), SEP, and strlen().

Referenced by filelist_parent(), and filelist_read_library().

void BLI_make_existing_file ( const char *  name)
void BLI_make_file_string ( const char *  relabase,
char *  string,
const char *  dir,
const char *  file 
)
void BLI_newname ( char *  name,
int  add 
)

Definition at line 193 of file path_util.c.

References add(), BLI_stringdec(), BLI_stringenc(), KDL::exp(), i, and UNIQUE_NAME_MAX.

Referenced by file_filenum_exec(), and make_unique_prop_names().

int BLI_parent_dir ( char *  path)
int BLI_path_abs ( char *  path,
const char *  basepath 
)

Blender's path code replacement function. Bases path strings leading with "//" by the directory basepath, and replaces instances of '#' with the framenum. Results are written back into path.

path The path to convert basepath The directory to base relative paths with. framenum The framenumber to replace the frame code with.

Return values:
Returnstrue if the path was relative (started with "//").

Definition at line 639 of file path_util.c.

References BLI_char_switch(), BLI_cleanup_path(), BLI_last_slash(), BLI_strncpy(), FILE_MAX, NULL, and p.

Referenced by add_text(), BKE_add_image_file(), BKE_add_movieclip_file(), BKE_library_filepath_set(), BKE_makepicstring(), BKE_rebase_path(), BL_MakeScreenShot(), BLI_cleanup_path(), bpath_relocate_visitor(), bpy_lib_load(), cache_voxeldata(), checkPackedFile(), customdata_external_filename(), do_versions(), dynamicPaint_outputSurfaceImage(), ED_fileselect_set_params(), file_browse_exec(), file_operator_to_sfile(), filepath_avi(), get_brush_icon(), get_proxy_fname(), get_sequence_fname(), GetFontId(), image_load_image_file(), image_load_movie_file(), image_load_sequence_file(), image_save_sequence_exec(), main(), makeFilesAbsolute_visit_cb(), movieclip_load_movie_file(), namebutton_cb(), newPackedFile(), ImagesExporter::operator()(), particles_fluid_step(), ptcache_path(), RE_WriteEnvmapResult(), reload_sequence_new_file(), reopen_text(), rewrite_path_alloc(), rewrite_path_fixed(), rewrite_path_fixed_dirfile(), save_image_options_from_op(), save_image_options_init(), screenshot_exec(), seq_open_anim_file(), seq_proxy_get_fname(), seq_render_strip(), sequencer_add_movie_strip(), sequencer_generic_invoke_path__internal(), sound_mixdown_exec(), sound_new_file(), space_image_file_exists_poll(), StartKetsjiShell(), text_file_modified(), text_ignore_modified(), txt_write_file(), and writePackedFile().

char* BLI_path_basename ( char *  path)
int BLI_path_cwd ( char *  path)

Definition at line 735 of file path_util.c.

References BLI_current_working_dir(), BLI_make_file_string(), BLI_strncpy(), FILE_MAX, NULL, and strlen().

Referenced by load_file(), main(), and run_python().

int BLI_path_frame ( char *  path,
int  frame,
int  digits 
)
int BLI_path_frame_range ( char *  path,
int  sta,
int  end,
int  digits 
)

Definition at line 621 of file path_util.c.

References BLI_snprintf(), BLI_strncpy(), ensure_digits(), FILE_MAX, and stringframe_chars().

Referenced by filepath_avi().

void BLI_path_rel ( char *  file,
const char *  relfile 
)
const char* BLI_program_dir ( void  )

Definition at line 1846 of file path_util.c.

References bprogdir.

const char* BLI_program_path ( void  )

Definition at line 1841 of file path_util.c.

References bprogname.

Referenced by BPY_python_start(), main(), and make_app_info().

int BLI_replace_extension ( char *  path,
size_t  maxlen,
const char *  ext 
)

Definition at line 1417 of file path_util.c.

References ELEM3, and strlen().

Referenced by BKE_add_image_extension(), imb_cache_filename(), WM_write_file(), and write_crash_blend().

void BLI_setenv ( const char *  env,
const char *  val 
)

Definition at line 1178 of file path_util.c.

References MEM_freeN(), MEM_mallocN(), and strlen().

Referenced by BLI_setenv_if_new(), BPY_python_start(), main(), PyC_SetHomePath(), and set_env().

void BLI_setenv_if_new ( const char *  env,
const char *  val 
)

Only set an env var if already not there. Like Unix setenv(env, val, 0);

Definition at line 1202 of file path_util.c.

References BLI_setenv(), and NULL.

void BLI_split_dir_part ( const char *  string,
char *  dir,
const size_t  dirlen 
)
void BLI_split_dirfile ( const char *  string,
char *  dir,
char *  file,
const size_t  dirlen,
const size_t  filelen 
)
void BLI_split_file_part ( const char *  string,
char *  file,
const size_t  filelen 
)

Definition at line 1501 of file path_util.c.

References BLI_split_dirfile(), and NULL.

Referenced by ptcache_path().

int BLI_split_name_num ( char *  left,
int *  nr,
const char *  name,
const char  delim 
)
void BLI_splitdirstring ( char *  di,
char *  fi 
)
int BLI_stringdec ( const char *  string,
char *  head,
char *  tail,
unsigned short *  numlen 
)

Definition at line 107 of file path_util.c.

References BLI_last_slash(), i, len(), and strlen().

Referenced by BLI_newname(), get_sequence_fname(), and image_load_sequence_file().

void BLI_stringenc ( char *  string,
const char *  head,
const char *  tail,
unsigned short  numlen,
int  pic 
)
void BLI_system_temporary_dir ( char *  dir)

Definition at line 1916 of file path_util.c.

References BLI_where_is_temp(), FILE_MAX, and NULL.

Referenced by init_userdef_do_versions().

const char* BLI_temporary_dir ( void  )
int BLI_testextensie ( const char *  str,
const char *  ext 
)
int BLI_testextensie_array ( const char *  str,
const char **  ext_array 
)
int BLI_testextensie_glob ( const char *  str,
const char *  ext_fnmatch 
)

Definition at line 1389 of file path_util.c.

References BLI_strncpy(), and FNM_CASEFOLD.

Referenced by filelist_setfiletypes().

void BLI_uniquename ( ListBase list,
void *  vlink,
const char  defname[],
char  delim,
short  name_offs,
short  name_len 
)
int BLI_uniquename_cb ( int(*)(void *, const char *)  unique_check,
void *  arg,
const char  defname[],
char  delim,
char *  name,
short  name_len 
)
static void bli_where_am_i ( char *  fullname,
const size_t  maxlen,
const char *  name 
) [static]
static void BLI_where_is_temp ( char *  fullname,
const size_t  maxlen,
char *  userdir 
) [static]

Gets the temp directory when blender first runs. If the default path is not found, use try $TEMP

Also make sure the temp dir has a trailing slash

Parameters:
fullnameThe full path to the temp directory
userdirDirectory specified in user preferences

Definition at line 1860 of file path_util.c.

References BLI_add_slash(), BLI_is_dir(), and BLI_strncpy().

Referenced by BLI_init_temporary_dir(), and BLI_system_temporary_dir().

static void ensure_digits ( char *  path,
int  digits 
) [static]

Definition at line 588 of file path_util.c.

References BLI_last_slash(), len(), NULL, and strlen().

Referenced by BLI_path_frame(), and BLI_path_frame_range().

static int get_path_local ( char *  targetpath,
const char *  folder_name,
const char *  subfolder_name,
const int  ver 
) [static]
static int get_path_system ( char *  targetpath,
const char *  folder_name,
const char *  subfolder_name,
const char *  envvar,
const int  ver 
) [static]
static int get_path_user ( char *  targetpath,
const char *  folder_name,
const char *  subfolder_name,
const char *  envvar,
const int  ver 
) [static]
static int is_portable_install ( void  ) [static]

Definition at line 931 of file path_util.c.

References BLENDER_VERSION, FILE_MAX, get_path_local(), and NULL.

Referenced by get_path_user().

static int stringframe_chars ( char *  path,
int *  char_start,
int *  char_end 
) [static]

Definition at line 556 of file path_util.c.

References i.

Referenced by BLI_path_frame(), and BLI_path_frame_range().

static int test_env_path ( char *  path,
const char *  envvar 
) [static]

Definition at line 891 of file path_util.c.

References BLI_is_dir(), BLI_strncpy(), FILE_MAX, and NULL.

Referenced by get_path_system(), and get_path_user().

static int test_path ( char *  targetpath,
const char *  path_base,
const char *  path_sep,
const char *  folder_name 
) [static]
static int uniquename_find_dupe ( ListBase list,
void *  vlink,
const char *  name,
short  name_offs 
) [static]

Definition at line 269 of file path_util.c.

References ListBase::first, GIVE_STRADDR, link(), and Link::next.

Referenced by uniquename_unique_check().

static int uniquename_unique_check ( void *  arg,
const char *  name 
) [static]

Definition at line 284 of file path_util.c.

References data, and uniquename_find_dupe().

Referenced by BLI_uniquename().


Variable Documentation

char bprogdir[FILE_MAX] [static]
char bprogname[FILE_MAX] [static]

Definition at line 98 of file path_util.c.

Referenced by BLI_init_program_path(), and BLI_program_path().

char btempdir[FILE_MAX] [static]

Definition at line 100 of file path_util.c.

Referenced by BLI_init_temporary_dir(), and BLI_temporary_dir().