Blender  V2.93
Macros | Typedefs | Enumerations | Functions
BLI_fileops.h File Reference

File and directory operations. More...

#include <stdint.h>
#include <stdio.h>
#include <sys/stat.h>
#include <stddef.h>
#include <limits.h>
#include "BLI_compiler_attrs.h"
#include "BLI_utildefines.h"

Go to the source code of this file.

Macros

#define PATH_MAX   4096
 
#define FILE_ATTR_ANY_LINK
 
#define O_BINARY   0
 

Typedefs

typedef struct stat BLI_stat_t
 
typedef enum eFileAttributes eFileAttributes
 

Enumerations

enum  eFileAttributes {
  FILE_ATTR_READONLY = 1 << 0 , FILE_ATTR_HIDDEN = 1 << 1 , FILE_ATTR_SYSTEM = 1 << 2 , FILE_ATTR_ARCHIVE = 1 << 3 ,
  FILE_ATTR_COMPRESSED = 1 << 4 , FILE_ATTR_ENCRYPTED = 1 << 5 , FILE_ATTR_RESTRICTED = 1 << 6 , FILE_ATTR_TEMPORARY = 1 << 7 ,
  FILE_ATTR_SPARSE_FILE = 1 << 8 , FILE_ATTR_OFFLINE = 1 << 9 , FILE_ATTR_ALIAS = 1 << 10 , FILE_ATTR_REPARSE_POINT = 1 << 11 ,
  FILE_ATTR_SYMLINK = 1 << 12 , FILE_ATTR_JUNCTION_POINT = 1 << 13 , FILE_ATTR_MOUNT_POINT = 1 << 14 , FILE_ATTR_HARDLINK = 1 << 15
}
 

Functions

int BLI_exists (const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int BLI_copy (const char *file, const char *to) ATTR_NONNULL()
 
int BLI_rename (const char *from, const char *to) ATTR_NONNULL()
 
int BLI_delete (const char *file, bool dir, bool recursive) ATTR_NONNULL()
 
int BLI_delete_soft (const char *file, const char **error_message) ATTR_NONNULL()
 
int BLI_fstat (int fd, BLI_stat_t *buffer) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int BLI_stat (const char *path, BLI_stat_t *buffer) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int64_t BLI_ftell (FILE *stream) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int BLI_fseek (FILE *stream, int64_t offset, int whence)
 
int64_t BLI_lseek (int fd, int64_t offset, int whence)
 
bool BLI_is_dir (const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_is_file (const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_dir_create_recursive (const char *dir) ATTR_NONNULL()
 
double BLI_dir_free_space (const char *dir) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
char * BLI_current_working_dir (char *dir, const size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
eFileAttributes BLI_file_attributes (const char *path)
 
unsigned int BLI_filelist_dir_contents (const char *dir, struct direntry **r_filelist)
 
void BLI_filelist_entry_duplicate (struct direntry *dst, const struct direntry *src)
 
void BLI_filelist_duplicate (struct direntry **dest_filelist, struct direntry *const src_filelist, const unsigned int nrentries)
 
void BLI_filelist_entry_free (struct direntry *entry)
 
void BLI_filelist_free (struct direntry *filelist, const unsigned int nrentries)
 
void BLI_filelist_entry_size_to_string (const struct stat *st, const uint64_t sz, const bool compact, char r_size[])
 
void BLI_filelist_entry_mode_to_string (const struct stat *st, const bool compact, char r_mode1[], char r_mode2[], char r_mode3[])
 
void BLI_filelist_entry_owner_to_string (const struct stat *st, const bool compact, char r_owner[])
 
void BLI_filelist_entry_datetime_to_string (const struct stat *st, const int64_t ts, const bool compact, char r_time[], char r_date[], bool *r_is_today, bool *r_is_yesterday)
 
FILE * BLI_fopen (const char *filename, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
void * BLI_gzopen (const char *filename, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int BLI_open (const char *filename, int oflag, int pmode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
int BLI_access (const char *filename, int mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_file_is_writable (const char *file) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_file_touch (const char *file) ATTR_NONNULL()
 
bool BLI_file_alias_target (const char *filepath, char *r_targetpath) ATTR_WARN_UNUSED_RESULT
 
char * BLI_file_ungzip_to_mem (const char *from_file, int *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
size_t BLI_gzip_mem_to_file_at_pos (void *buf, size_t len, FILE *file, size_t gz_stream_offset, int compression_level) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
size_t BLI_ungzip_file_to_mem_at_pos (void *buf, size_t len, FILE *file, size_t gz_stream_offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
size_t BLI_file_descriptor_size (int file) ATTR_WARN_UNUSED_RESULT
 
size_t BLI_file_size (const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
bool BLI_file_older (const char *file1, const char *file2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
struct LinkNodeBLI_file_read_as_lines (const char *file) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
 
void * BLI_file_read_text_as_mem (const char *filepath, size_t pad_bytes, size_t *r_size)
 
void * BLI_file_read_text_as_mem_with_newline_as_nil (const char *filepath, bool trim_trailing_space, size_t pad_bytes, size_t *r_size)
 
void * BLI_file_read_binary_as_mem (const char *filepath, size_t pad_bytes, size_t *r_size)
 
void BLI_file_free_lines (struct LinkNode *lines)
 

Detailed Description

File and directory operations.

Definition in file BLI_fileops.h.

Macro Definition Documentation

◆ FILE_ATTR_ANY_LINK

#define FILE_ATTR_ANY_LINK
Value:
FILE_ATTR_MOUNT_POINT | FILE_ATTR_HARDLINK)
@ FILE_ATTR_HARDLINK
Definition: BLI_fileops.h:96
@ FILE_ATTR_ALIAS
Definition: BLI_fileops.h:91
@ FILE_ATTR_REPARSE_POINT
Definition: BLI_fileops.h:92
@ FILE_ATTR_JUNCTION_POINT
Definition: BLI_fileops.h:94
@ FILE_ATTR_SYMLINK
Definition: BLI_fileops.h:93

Definition at line 99 of file BLI_fileops.h.

◆ O_BINARY

#define O_BINARY   0

Definition at line 182 of file BLI_fileops.h.

◆ PATH_MAX

#define PATH_MAX   4096

Definition at line 44 of file BLI_fileops.h.

Typedef Documentation

◆ BLI_stat_t

typedef struct stat BLI_stat_t

Definition at line 53 of file BLI_fileops.h.

◆ eFileAttributes

Enumeration Type Documentation

◆ eFileAttributes

Enumerator
FILE_ATTR_READONLY 
FILE_ATTR_HIDDEN 
FILE_ATTR_SYSTEM 
FILE_ATTR_ARCHIVE 
FILE_ATTR_COMPRESSED 
FILE_ATTR_ENCRYPTED 
FILE_ATTR_RESTRICTED 
FILE_ATTR_TEMPORARY 
FILE_ATTR_SPARSE_FILE 
FILE_ATTR_OFFLINE 
FILE_ATTR_ALIAS 
FILE_ATTR_REPARSE_POINT 
FILE_ATTR_SYMLINK 
FILE_ATTR_JUNCTION_POINT 
FILE_ATTR_MOUNT_POINT 
FILE_ATTR_HARDLINK 

Definition at line 80 of file BLI_fileops.h.

Function Documentation

◆ BLI_access()

int BLI_access ( const char *  filename,
int  mode 
)

◆ BLI_copy()

int BLI_copy ( const char *  file,
const char *  to 
)

◆ BLI_current_working_dir()

char* BLI_current_working_dir ( char *  dir,
const size_t  maxncpy 
)

Copies the current working directory into *dir (max size maxncpy), and returns a pointer to same.

Note
can return NULL when the size is not big enough

Definition at line 81 of file storage.c.

References BLI_getenv(), BLI_strncpy_wchar_as_utf8(), BLI_strnlen(), and NULL.

Referenced by BLI_path_abs_from_cwd().

◆ BLI_delete()

int BLI_delete ( const char *  file,
bool  dir,
bool  recursive 
)

◆ BLI_delete_soft()

int BLI_delete_soft ( const char *  file,
const char **  error_message 
)

Soft deletes the specified file or directory (depending on dir) by moving the files to the recycling bin, optionally doing recursive delete of directory contents.

Returns
zero on success (matching 'remove' behavior).

Definition at line 1056 of file fileops.c.

References BLI_assert, BLI_path_is_rel(), delete_soft(), and file.

Referenced by file_delete_single().

◆ BLI_dir_create_recursive()

bool BLI_dir_create_recursive ( const char *  dirname)

◆ BLI_dir_free_space()

double BLI_dir_free_space ( const char *  dir)

Returns the number of free bytes on the volume containing the specified pathname.

Definition at line 109 of file storage.c.

References ELEM, FILE_MAXDIR, and len.

◆ BLI_exists()

int BLI_exists ( const char *  path)

Returns the st_mode from stat-ing the specified path name, or 0 if stat fails (most likely doesn't exist or no access).

Definition at line 349 of file storage.c.

References alloc_utf16_from_8(), BLI_assert, BLI_path_is_rel(), ELEM, free(), L, and len.

Referenced by BKE_appdir_app_template_has_userpref(), BKE_appdir_program_python_search(), BKE_cachefile_filepath_get(), BKE_packedfile_compare_to_file(), BKE_packedfile_unpack_to_file(), BKE_ptcache_id_exist(), BKE_ptcache_remove(), BKE_text_file_modified_check(), BKE_text_file_modified_ignore(), BKE_volume_load(), blf_dir_metrics_search(), blf_dir_search(), BLI_dir_create_recursive(), BLI_is_dir(), BLI_is_file(), BLI_path_program_search(), BLI_rename(), checkMissingFiles_visit_cb(), blender::io::alembic::AlembicExportTest::deleteArchive(), do_history(), blender::io::alembic::export_endjob(), blender::io::usd::export_endjob(), file_delete_single(), file_directory_new_exec(), file_exec(), file_sfile_filepath_set(), filepath_drop_exec(), fsmenu_read_bookmarks(), MANTA::hasConfig(), MANTA::hasData(), MANTA::hasGuiding(), MANTA::hasMesh(), MANTA::hasNoise(), MANTA::hasParticles(), image_save_exec(), IMB_anim_proxy_get_existing(), IMB_exr_begin_read(), IMB_thumb_delete(), IMB_thumb_manage(), missing_files_find__visit_cb(), movieclip_calc_length(), namebutton_fn(), new_folder_path(), openanim(), RE_RenderAnim(), renamebutton_cb(), screen_opengl_render_anim_step(), seq_disk_cache_enforce_limits(), seq_disk_cache_handle_versioning(), seq_proxy_build_frame(), seq_proxy_fetch(), sequencer_export_subtitles_exec(), txt_write_file(), where_am_i(), wm_autosave_delete(), wm_autosave_location(), wm_block_create_splash(), wm_file_write(), wm_homefile_read(), WM_lib_reload(), wm_lib_relocate_exec_do(), workspace_config_file_read(), workspace_system_file_read(), and DocumentImporter::writeImage().

◆ BLI_file_alias_target()

bool BLI_file_alias_target ( const char *  filepath,
char *  r_targetpath 
)

◆ BLI_file_attributes()

eFileAttributes BLI_file_attributes ( const char *  path)

◆ BLI_file_descriptor_size()

size_t BLI_file_descriptor_size ( int  file)

Returns the file size of an opened file descriptor.

Definition at line 207 of file storage.c.

References BLI_fstat(), and file.

Referenced by BKE_packedfile_new(), build_pict_list_ex(), IMB_loadifffile(), imb_loadtilefile(), prefetch_read_file_to_memory(), and proxy_thread_next_frame().

◆ BLI_file_free_lines()

void BLI_file_free_lines ( struct LinkNode lines)

◆ BLI_file_is_writable()

bool BLI_file_is_writable ( const char *  filename)

Returns true if the file with the specified name can be written. This implementation uses access(2), which makes the check according to the real UID and GID of the process, not its effective UID and GID. This shouldn't matter for Blender, which is not going to run privileged anyway.

Definition at line 265 of file fileops.c.

References BLI_access(), BLI_split_dirfile(), FILE_MAX, and NULL.

Referenced by image_save_exec(), RE_is_rendering_allowed(), sequencer_export_subtitles_exec(), txt_write_file(), and wm_file_write().

◆ BLI_file_older()

bool BLI_file_older ( const char *  file1,
const char *  file2 
)

is file1 older than file2

Definition at line 645 of file storage.c.

References UTF16_ENCODE, and UTF16_UN_ENCODE.

Referenced by imb_cache_filename(), and IMB_thumb_manage().

◆ BLI_file_read_as_lines()

struct LinkNode* BLI_file_read_as_lines ( const char *  filepath)

Reads the contents of a text file and returns the lines in a linked list.

Definition at line 590 of file storage.c.

References BLI_fopen(), BLI_fseek(), BLI_ftell(), BLI_linklist_append(), BLI_strdupn(), LinkNodePair::list, MEM_freeN, MEM_mallocN, NULL, size(), and UNLIKELY.

Referenced by make(), studiolight_load_solid_light(), wm_history_file_read(), and wm_platform_support_check_approval().

◆ BLI_file_read_binary_as_mem()

void* BLI_file_read_binary_as_mem ( const char *  filepath,
size_t  pad_bytes,
size_t *  r_size 
)

Definition at line 519 of file storage.c.

References BLI_fopen(), file_read_data_as_mem_impl(), and NULL.

Referenced by BKE_icon_geom_from_file().

◆ BLI_file_read_text_as_mem()

void* BLI_file_read_text_as_mem ( const char *  filepath,
size_t  pad_bytes,
size_t *  r_size 
)

◆ BLI_file_read_text_as_mem_with_newline_as_nil()

void* BLI_file_read_text_as_mem_with_newline_as_nil ( const char *  filepath,
bool  trim_trailing_space,
size_t  pad_bytes,
size_t *  r_size 
)

Return the text file data with:

  • Newlines replaced with '\0'.
  • Optionally trim white-space, replacing trailing <space> & <tab> with '\0'.

This is an alternative to using BLI_file_read_as_lines, allowing us to loop over lines without converting it into a linked list with individual allocations.

Parameters
trim_trailing_spaceReplace trailing spaces & tabs with nil. This arguments prevents the caller from counting blank lines (if that's important).
pad_bytesWhen this is non-zero, the first byte is set to nil, to simplify parsing the file. It's recommended to pass in 1, so all text is nil terminated.

Example looping over lines:

size_t data_len;
char *data = BLI_file_read_text_as_mem_with_newline_as_nil(filepath, true, 1, &data_len);
char *data_end = data + data_len;
for (char *line = data; line != data_end; line = strlen(line) + 1) {
printf("line='%s'\n", line);
}
void * BLI_file_read_text_as_mem_with_newline_as_nil(const char *filepath, bool trim_trailing_space, size_t pad_bytes, size_t *r_size)
Definition: storage.c:557

Definition at line 557 of file storage.c.

References BLI_file_read_text_as_mem(), ELEM, and NULL.

◆ BLI_file_size()

size_t BLI_file_size ( const char *  path)

Returns the size of a file.

Definition at line 219 of file storage.c.

References BLI_stat().

Referenced by IMB_exr_begin_read(), RE_RenderAnim(), and thumb_create_ex().

◆ BLI_file_touch()

bool BLI_file_touch ( const char *  file)

Creates the file with nothing in it, or updates its last-modified date if it already exists. Returns true if successful (like the unix touch command).

Definition at line 294 of file fileops.c.

References BLI_fopen(), Freestyle::c, file, and NULL.

Referenced by RE_RenderAnim(), seq_disk_cache_read_file(), and sequencer_export_subtitles_exec().

◆ BLI_file_ungzip_to_mem()

char* BLI_file_ungzip_to_mem ( const char *  from_file,
int *  r_size 
)

Definition at line 117 of file fileops.c.

References BLI_gzopen(), MEM_callocN, MEM_freeN, MEM_reallocN, NULL, and size().

◆ BLI_filelist_dir_contents()

unsigned int BLI_filelist_dir_contents ( const char *  dirname,
struct direntry **  r_filelist 
)

Scans the contents of the directory named *dirname, and allocates and fills in an array of entries describing them in *filelist.

Returns
The length of filelist array.

Definition at line 238 of file BLI_filelist.c.

References bli_builddir(), dirname(), BuildDirCtx::files, MEM_mallocN, BuildDirCtx::nrfiles, and NULL.

Referenced by BKE_appdir_app_templates(), filelist_readjob_list_dir(), fsmenu_read_system(), image_get_udim(), init_iconfile_list(), seq_disk_cache_get_files(), and studiolight_add_files_from_datafolder().

◆ BLI_filelist_duplicate()

void BLI_filelist_duplicate ( struct direntry **  dest_filelist,
struct direntry *const  src_filelist,
const unsigned int  nrentries 
)

Deep-duplicate of an array of direntries, including the array itself.

Definition at line 437 of file BLI_filelist.c.

References BLI_filelist_entry_duplicate(), and MEM_mallocN.

◆ BLI_filelist_entry_datetime_to_string()

void BLI_filelist_entry_datetime_to_string ( const struct stat *  st,
const int64_t  ts,
const bool  compact,
char  r_time[],
char  r_date[],
bool *  r_is_today,
bool *  r_is_yesterday 
)

◆ BLI_filelist_entry_duplicate()

void BLI_filelist_entry_duplicate ( struct direntry dst,
const struct direntry src 
)

Deep-duplicate of a single direntry.

Definition at line 423 of file BLI_filelist.c.

References MEM_dupallocN, direntry::path, and direntry::relname.

Referenced by BLI_filelist_duplicate().

◆ BLI_filelist_entry_free()

void BLI_filelist_entry_free ( struct direntry entry)

frees storage for a single direntry, not the direntry itself.

Definition at line 454 of file BLI_filelist.c.

References MEM_freeN, direntry::path, and direntry::relname.

Referenced by BLI_filelist_free().

◆ BLI_filelist_entry_mode_to_string()

void BLI_filelist_entry_mode_to_string ( const struct stat *  st,
const bool  compact,
char  r_mode1[],
char  r_mode2[],
char  r_mode3[] 
)

◆ BLI_filelist_entry_owner_to_string()

void BLI_filelist_entry_owner_to_string ( const struct stat *  st,
const bool  compact,
char  r_owner[] 
)

◆ BLI_filelist_entry_size_to_string()

void BLI_filelist_entry_size_to_string ( const struct stat *  st,
const uint64_t  sz,
const bool  compact,
char  r_size[] 
)

◆ BLI_filelist_free()

void BLI_filelist_free ( struct direntry filelist,
const unsigned int  nrentries 
)

frees storage for an array of direntries, including the array itself.

Definition at line 467 of file BLI_filelist.c.

References BLI_filelist_entry_free(), MEM_freeN, and NULL.

Referenced by BKE_appdir_app_templates(), filelist_readjob_list_dir(), fsmenu_read_system(), image_get_udim(), init_iconfile_list(), seq_disk_cache_get_files(), and studiolight_add_files_from_datafolder().

◆ BLI_fopen()

FILE* BLI_fopen ( const char *  filename,
const char *  mode 
)

◆ BLI_fseek()

int BLI_fseek ( FILE *  stream,
int64_t  offset,
int  whence 
)

◆ BLI_fstat()

int BLI_fstat ( int  fd,
BLI_stat_t buffer 
)

◆ BLI_ftell()

int64_t BLI_ftell ( FILE *  stream)

◆ BLI_gzip_mem_to_file_at_pos()

size_t BLI_gzip_mem_to_file_at_pos ( void *  buf,
size_t  len,
FILE *  file,
size_t  gz_stream_offset,
int  compression_level 
)

Definition at line 166 of file fileops.c.

References CHUNK, file, len, and ret.

Referenced by deflate_imbuf_to_file().

◆ BLI_gzopen()

void* BLI_gzopen ( const char *  filename,
const char *  mode 
)

◆ BLI_is_dir()

bool BLI_is_dir ( const char *  file)

◆ BLI_is_file()

bool BLI_is_file ( const char *  path)

Does the specified path point to a non-directory?

Definition at line 444 of file storage.c.

References BLI_exists(), and S_ISDIR.

Referenced by BLO_library_path_explode(), file_directory_enter_handle(), file_draw_check_exists(), filelist_checkdir_lib(), and lib_id_load_custom_preview_exec().

◆ BLI_lseek()

int64_t BLI_lseek ( int  fd,
int64_t  offset,
int  whence 
)

◆ BLI_open()

int BLI_open ( const char *  filename,
int  oflag,
int  pmode 
)

◆ BLI_rename()

int BLI_rename ( const char *  from,
const char *  to 
)

◆ BLI_stat()

int BLI_stat ( const char *  path,
BLI_stat_t buffer 
)

◆ BLI_ungzip_file_to_mem_at_pos()

size_t BLI_ungzip_file_to_mem_at_pos ( void *  buf,
size_t  len,
FILE *  file,
size_t  gz_stream_offset 
)

Definition at line 213 of file fileops.c.

References CHUNK, file, len, and ret.

Referenced by inflate_file_to_imbuf().