Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Functions | Variables
file.c File Reference
#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include "internal.h"
#include <winbase.h>
#include <wchar.h>
#include <shlwapi.h>
#include "win32/file.h"
Include dependency graph for file.c:

Go to the source code of this file.

Data Structures

struct  code_page_table
 

Macros

#define INVALID_FILE_ATTRIBUTES   ((DWORD)-1)
 
#define IS_DIR_SEPARATOR_P(c)   (c == L'\\' || c == L'/')
 
#define IS_DIR_UNC_P(c)   (IS_DIR_SEPARATOR_P(c[0]) && IS_DIR_SEPARATOR_P(c[1]))
 
#define INVALID_CODE_PAGE   51932
 
#define PATH_BUFFER_SIZE   MAX_PATH * 2
 
#define insecure_obj_p(obj, level)   ((level) > 0 && OBJ_TAINTED(obj))
 
#define system_code_page   rb_w32_filecp
 
#define mbstr_to_wstr   rb_w32_mbstr_to_wstr
 
#define wstr_to_mbstr   rb_w32_wstr_to_mbstr
 
#define fix_string_encoding(str, encoding)   rb_str_conv_enc((str), (encoding), rb_utf8_encoding())
 

Functions

static void replace_wchar (wchar_t *s, int find, int replace)
 
static size_t remove_invalid_alternative_data (wchar_t *wfullpath, size_t size)
 
void rb_enc_foreach_name (int(*func)(st_data_t name, st_data_t idx, st_data_t arg), st_data_t arg)
 
static int code_page_i (st_data_t name, st_data_t idx, st_data_t arg)
 
static UINT code_page (rb_encoding *enc)
 
static size_t replace_to_long_name (wchar_t **wfullpath, size_t size, size_t buffer_size)
 
static size_t user_length_in_path (const wchar_t *wuser, size_t len)
 
static VALUE append_wstr (VALUE dst, const WCHAR *ws, ssize_t len, UINT cp, rb_encoding *enc)
 
VALUE rb_default_home_dir (VALUE result)
 
VALUE rb_file_expand_path_internal (VALUE fname, VALUE dname, int abs_mode, int long_name, VALUE result)
 
VALUE rb_readlink (VALUE path, rb_encoding *resultenc)
 
int rb_file_load_ok (const char *path)
 
int rb_freopen (VALUE fname, const char *mode, FILE *file)
 
void Init_w32_codepage (void)
 

Variables

static struct code_page_table rb_code_page
 

Macro Definition Documentation

◆ fix_string_encoding

#define fix_string_encoding (   str,
  encoding 
)    rb_str_conv_enc((str), (encoding), rb_utf8_encoding())

Definition at line 135 of file file.c.

Referenced by rb_file_expand_path_internal(), and rb_readlink().

◆ insecure_obj_p

#define insecure_obj_p (   obj,
  level 
)    ((level) > 0 && OBJ_TAINTED(obj))

Definition at line 30 of file file.c.

◆ INVALID_CODE_PAGE

#define INVALID_CODE_PAGE   51932

Definition at line 27 of file file.c.

Referenced by append_wstr(), code_page(), code_page_i(), rb_file_expand_path_internal(), and rb_readlink().

◆ INVALID_FILE_ATTRIBUTES

#define INVALID_FILE_ATTRIBUTES   ((DWORD)-1)

Definition at line 14 of file file.c.

Referenced by rb_file_load_ok().

◆ IS_DIR_SEPARATOR_P

#define IS_DIR_SEPARATOR_P (   c)    (c == L'\\' || c == L'/')

◆ IS_DIR_UNC_P

#define IS_DIR_UNC_P (   c)    (IS_DIR_SEPARATOR_P(c[0]) && IS_DIR_SEPARATOR_P(c[1]))

Definition at line 24 of file file.c.

Referenced by rb_file_expand_path_internal().

◆ mbstr_to_wstr

#define mbstr_to_wstr   rb_w32_mbstr_to_wstr

Definition at line 34 of file file.c.

Referenced by rb_file_expand_path_internal(), and rb_file_load_ok().

◆ PATH_BUFFER_SIZE

#define PATH_BUFFER_SIZE   MAX_PATH * 2

Definition at line 28 of file file.c.

Referenced by rb_file_expand_path_internal().

◆ system_code_page

#define system_code_page   rb_w32_filecp

Definition at line 33 of file file.c.

Referenced by code_page(), and rb_file_expand_path_internal().

◆ wstr_to_mbstr

#define wstr_to_mbstr   rb_w32_wstr_to_mbstr

Definition at line 35 of file file.c.

Referenced by append_wstr().

Function Documentation

◆ append_wstr()

static VALUE append_wstr ( VALUE  dst,
const WCHAR *  ws,
ssize_t  len,
UINT  cp,
rb_encoding enc 
)
static

◆ code_page()

static UINT code_page ( rb_encoding enc)
static

◆ code_page_i()

static int code_page_i ( st_data_t  name,
st_data_t  idx,
st_data_t  arg 
)
static

◆ Init_w32_codepage()

void Init_w32_codepage ( void  )

Definition at line 703 of file file.c.

References code_page_i(), code_page_table::count, rb_code_page, rb_enc_foreach_name(), and st_data_t.

Referenced by rb_locale_encindex().

◆ rb_default_home_dir()

VALUE rb_default_home_dir ( VALUE  result)

◆ rb_enc_foreach_name()

void rb_enc_foreach_name ( int(*)(st_data_t name, st_data_t idx, st_data_t arg)  func,
st_data_t  arg 
)

Definition at line 1964 of file encoding.c.

References enc_table, func, and st_foreach.

Referenced by Init_w32_codepage(), and remove_invalid_alternative_data().

◆ rb_file_expand_path_internal()

VALUE rb_file_expand_path_internal ( VALUE  fname,
VALUE  dname,
int  abs_mode,
int  long_name,
VALUE  result 
)

◆ rb_file_load_ok()

int rb_file_load_ok ( const char *  path)

◆ rb_freopen()

int rb_freopen ( VALUE  fname,
const char *  mode,
FILE file 
)

Definition at line 674 of file file.c.

References ALLOCV_END, ALLOCV_N, errno, L, len, name, NULL, numberof, RB_GC_GUARD, rb_long2int, and RSTRING_GETMEM.

◆ rb_readlink()

VALUE rb_readlink ( VALUE  path,
rb_encoding resultenc 
)

◆ remove_invalid_alternative_data()

static size_t remove_invalid_alternative_data ( wchar_t *  wfullpath,
size_t  size 
)
inlinestatic

Definition at line 49 of file file.c.

References func, IS_DIR_SEPARATOR_P, L, name, rb_enc_foreach_name(), size, and st_data_t.

Referenced by rb_file_expand_path_internal().

◆ replace_to_long_name()

static size_t replace_to_long_name ( wchar_t **  wfullpath,
size_t  size,
size_t  buffer_size 
)
inlinestatic

Definition at line 142 of file file.c.

References ALLOC_N, buf, IS_DIR_SEPARATOR_P, L, size, and xfree().

Referenced by rb_file_expand_path_internal().

◆ replace_wchar()

static void replace_wchar ( wchar_t *  s,
int  find,
int  replace 
)
inlinestatic

Definition at line 38 of file file.c.

Referenced by rb_file_expand_path_internal().

◆ user_length_in_path()

static size_t user_length_in_path ( const wchar_t *  wuser,
size_t  len 
)
inlinestatic

Definition at line 204 of file file.c.

References IS_DIR_SEPARATOR_P.

Referenced by rb_file_expand_path_internal().

Variable Documentation

◆ rb_code_page

struct code_page_table rb_code_page
static

Referenced by code_page(), and Init_w32_codepage().