win32/file.c File Reference

#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include "internal.h"
#include <winbase.h>
#include <wchar.h>
#include <shlwapi.h>

Go to the source code of this file.

Data Structures

struct  code_page_table

Defines

#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) >= 4 || ((level) > 0 && OBJ_TAINTED(obj)))
#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 void convert_mb_to_wchar (const char *str, wchar_t **wstr, size_t *wstr_len, UINT code_page)
static void convert_wchar_to_mb (const wchar_t *wstr, char **str, size_t *str_len, UINT code_page)
static wchar_t * home_dir (void)
static size_t remove_invalid_alternative_data (wchar_t *wfullpath, size_t size)
static UINT system_code_page (void)
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, int heap)
static VALUE get_user_from_path (wchar_t **wpath, int offset, UINT cp, UINT path_cp, rb_encoding *path_encoding)
VALUE rb_file_expand_path_internal (VALUE fname, VALUE dname, int abs_mode, int long_name, VALUE result)
int rb_file_load_ok (const char *path)
void Init_w32_codepage (void)

Variables

static struct code_page_table rb_code_page


Define Documentation

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

Definition at line 224 of file file.c.

Referenced by rb_file_expand_path_internal().

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

Definition at line 25 of file file.c.

#define INVALID_CODE_PAGE   51932

Definition at line 22 of file file.c.

Referenced by code_page(), code_page_i(), get_user_from_path(), and rb_file_expand_path_internal().

#define INVALID_FILE_ATTRIBUTES   ((DWORD)-1)

Definition at line 9 of file file.c.

Referenced by rb_file_load_ok().

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

Definition at line 18 of file file.c.

Referenced by get_user_from_path(), rb_file_expand_path_internal(), remove_invalid_alternative_data(), and replace_to_long_name().

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

Definition at line 19 of file file.c.

Referenced by rb_file_expand_path_internal().

#define PATH_BUFFER_SIZE   MAX_PATH * 2

Definition at line 23 of file file.c.

Referenced by rb_file_expand_path_internal().


Function Documentation

static UINT code_page ( rb_encoding enc  )  [static]

Definition at line 204 of file file.c.

References code_page_table::count, INVALID_CODE_PAGE, rb_ascii8bit_encindex, rb_code_page, rb_enc_to_index, rb_usascii_encindex, system_code_page(), and code_page_table::table.

Referenced by code_page_i(), and rb_file_expand_path_internal().

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

Definition at line 177 of file file.c.

References code_page(), code_page_table::count, count, INVALID_CODE_PAGE, realloc, ST_CONTINUE, and code_page_table::table.

Referenced by Init_w32_codepage().

static void convert_mb_to_wchar ( const char *  str,
wchar_t **  wstr,
size_t *  wstr_len,
UINT  code_page 
) [inline, static]

Definition at line 39 of file file.c.

References len, NULL, and xmalloc.

Referenced by rb_file_expand_path_internal(), and rb_file_load_ok().

static void convert_wchar_to_mb ( const wchar_t *  wstr,
char **  str,
size_t *  str_len,
UINT  code_page 
) [inline, static]

Definition at line 51 of file file.c.

References len, NULL, and xmalloc.

Referenced by get_user_from_path().

static VALUE get_user_from_path ( wchar_t **  wpath,
int  offset,
UINT  cp,
UINT  path_cp,
rb_encoding path_encoding 
) [inline, static]

Definition at line 297 of file file.c.

References convert_wchar_to_mb(), INVALID_CODE_PAGE, IS_DIR_SEPARATOR_P, Qnil, rb_enc_from_encoding(), rb_enc_str_new(), rb_str_encode(), rb_str_resize(), rb_utf8_encoding(), result, VALUE, and xfree.

Referenced by rb_file_expand_path_internal().

static wchar_t* home_dir ( void   )  [static]

Definition at line 72 of file file.c.

References len, NULL, replace_wchar(), and xmalloc.

Referenced by rb_file_expand_path_internal().

void Init_w32_codepage ( void   ) 

Definition at line 702 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().

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 1947 of file encoding.c.

References enc_table, and st_foreach().

Referenced by Init_w32_codepage().

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

Definition at line 328 of file file.c.

References ALLOCA_N, ALLOCV_END, ALLOCV_N, append_fspath(), buf, BUFCHECK, BUFINIT, chompdirsep(), code_page(), convert_mb_to_wchar(), ENC_CODERANGE_7BIT, ENC_CODERANGE_CLEAR, fix_string_encoding, get_user_from_path(), home_dir(), Inc, INVALID_CODE_PAGE, IS_DIR_SEPARATOR_P, IS_DIR_UNC_P, isdirsep, istrailinggarbage, len, lstat, MAXPATHLEN, my_getcwd, nextdirsep, NIL_P, NULL, OBJ_TAINT, OBJ_TAINTED, PATH_BUFFER_SIZE, PRIsVALUE, Qnil, rb_default_home_dir(), rb_eArgError, rb_enc_associate(), rb_enc_check(), rb_enc_copy(), rb_enc_from_encoding(), rb_enc_get(), rb_enc_raise(), rb_enc_str_asciionly_p(), rb_enc_str_coderange(), rb_file_expand_path_internal(), rb_filesystem_encoding(), rb_home_dir_of(), rb_is_absolute_path(), rb_raise(), rb_str_buf_cat(), rb_str_encode(), rb_str_encode_ospath(), rb_str_modify(), rb_str_resize(), rb_str_set_len(), rb_utf8_encoding(), remove_invalid_alternative_data(), replace_to_long_name(), replace_wchar(), RSTRING_LEN, RSTRING_PTR, S_ISLNK, skipprefix, skiproot(), stat, STRCASECMP, StringValuePtr, strlcat(), strlen(), strncasecmp, strrdirsep, system_code_page(), TOLOWER, VALUE, xfree, and xmalloc.

int rb_file_load_ok ( const char *  path  ) 

Definition at line 672 of file file.c.

References convert_mb_to_wchar(), fstat, INVALID_FILE_ATTRIBUTES, len, NULL, rb_cloexec_open(), rb_update_max_fd(), S_ISREG, stat, and xfree.

static size_t remove_invalid_alternative_data ( wchar_t *  wfullpath,
size_t  size 
) [inline, static]

Definition at line 137 of file file.c.

References IS_DIR_SEPARATOR_P.

Referenced by rb_file_expand_path_internal().

static size_t replace_to_long_name ( wchar_t **  wfullpath,
size_t  size,
int  heap 
) [inline, static]

Definition at line 231 of file file.c.

References buf, IS_DIR_SEPARATOR_P, xfree, and xmalloc.

Referenced by rb_file_expand_path_internal().

static void replace_wchar ( wchar_t *  s,
int  find,
int  replace 
) [inline, static]

Definition at line 28 of file file.c.

Referenced by home_dir(), and rb_file_expand_path_internal().

static UINT system_code_page ( void   )  [inline, static]

Definition at line 169 of file file.c.

Referenced by code_page(), and rb_file_expand_path_internal().


Variable Documentation

struct code_page_table rb_code_page [static]

Referenced by code_page(), and Init_w32_codepage().


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7