static void test_assembly_name_props_line(IAssemblyName *name, const ASMPROP_RES *vals, int line) { HRESULT hr; DWORD i, size; WCHAR expect[MAX_PATH]; WCHAR str[MAX_PATH]; CHAR val[MAX_PATH]; for (i = 0; i < ASM_NAME_MAX_PARAMS; i++) { to_widechar(expect, vals[i].val); size = MAX_PATH; ZeroMemory(str, MAX_PATH); hr = IAssemblyName_GetProperty(name, i, str, &size); to_multibyte(val, str); ok(hr == vals[i].hr || broken(i >= ASM_NAME_CONFIG_MASK && hr == E_INVALIDARG) || /* .NET 1.1 */ broken(i >= ASM_NAME_FILE_MAJOR_VERSION && hr == E_INVALIDARG), /* .NET 1.0 */ "%d: prop %d: Expected %08x, got %08x\n", line, i, vals[i].hr, hr); if (hr != E_INVALIDARG) { if (i == ASM_NAME_PUBLIC_KEY_TOKEN) ok(!memcmp(vals[i].val, str, size), "Expected a correct ASM_NAME_PUBLIC_KEY_TOKEN\n"); else ok(!lstrcmpA(vals[i].val, val), "%d: prop %d: Expected \"%s\", got \"%s\"\n", line, i, vals[i].val, val); ok(size == vals[i].size, "%d: prop %d: Expected %d, got %d\n", line, i, vals[i].size, size); } } }
/* Opens the editor with already typed in characters, gets entered line and * executes it as if it was typed. */ static void cmd_ctrl_g(key_info_t key_info, keys_info_t *keys_info) { const int type = submode_to_editable_command_type(sub_mode); const int prompt_ee = sub_mode == PROMPT_SUBMODE && sub_mode_allows_ee; if(type != -1 || prompt_ee) { char *const mbstr = (input_stat.line == NULL) ? strdup("") : to_multibyte(input_stat.line); leave_cmdline_mode(); if(sub_mode == FILTER_SUBMODE) { local_filter_cancel(curr_view); } if(prompt_ee) { extedit_prompt(mbstr, input_stat.index + 1); } else { get_and_execute_command(mbstr, input_stat.index + 1, type); } free(mbstr); } }
/* Initiates leaving of command-line mode and reverting related changes in other * parts of the interface. */ static void cmd_ctrl_c(key_info_t key_info, keys_info_t *keys_info) { stop_completion(); werase(status_bar); wnoutrefresh(status_bar); if(input_stat.line != NULL) { char *mbstr = to_multibyte(input_stat.line); save_input_to_history(keys_info, mbstr); free(mbstr); input_stat.line[0] = L'\0'; } if(sub_mode != FILTER_SUBMODE) { input_line_changed(); } leave_cmdline_mode(); if(prev_mode == VISUAL_MODE) { if(!input_stat.search_mode) { leave_visual_mode(curr_stats.save_msg, 1, 1); move_to_list_pos(curr_view, check_mark_directory(curr_view, '<')); } } if(sub_mode == CMD_SUBMODE) { curr_stats.save_msg = exec_commands("", curr_view, GET_COMMAND); } else if(sub_mode == FILTER_SUBMODE) { local_filter_cancel(curr_view); curr_view->top_line = input_stat.old_top; curr_view->list_pos = input_stat.old_pos; redraw_current_view(); } }
// UNICODEからUTF8に変換 bool unicode_to_utf8( const std::wstring& srcStr,std::string& dstStr ) { return to_multibyte( srcStr,dstStr,CP_UTF8 ); }
// UNICODEからSJISに変換 bool unicode_to_sjis( const std::wstring& srcStr,std::string& dstStr ) { return to_multibyte( srcStr,dstStr,CP_THREAD_ACP ); }
int get_link_target(const char *link, char *buf, size_t buf_len) { LOG_FUNC_ENTER; #ifndef _WIN32 char *filename; ssize_t len; if(buf_len == 0) { return -1; } filename = strdup(link); chosp(filename); len = readlink(filename, buf, buf_len - 1); free(filename); if(len == -1) { return -1; } buf[len] = '\0'; return 0; #else char filename[PATH_MAX]; DWORD attr; wchar_t *utf16_filename; HANDLE hfile; char rdb[2048]; char *t; REPARSE_DATA_BUFFER *sbuf; WCHAR *path; if(!is_symlink(link)) { return -1; } copy_str(filename, sizeof(filename), link); chosp(filename); utf16_filename = utf8_to_utf16(filename); hfile = CreateFileW(utf16_filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL); free(utf16_filename); if(hfile == INVALID_HANDLE_VALUE) { LOG_WERROR(GetLastError()); return -1; } if(!DeviceIoControl(hfile, FSCTL_GET_REPARSE_POINT, NULL, 0, rdb, sizeof(rdb), &attr, NULL)) { LOG_WERROR(GetLastError()); CloseHandle(hfile); return -1; } CloseHandle(hfile); sbuf = (REPARSE_DATA_BUFFER *)rdb; path = sbuf->SymbolicLinkReparseBuffer.PathBuffer; path[sbuf->SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(WCHAR) + sbuf->SymbolicLinkReparseBuffer.PrintNameLength/sizeof(WCHAR)] = L'\0'; t = to_multibyte(path + sbuf->SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(WCHAR)); if(strncmp(t, "\\??\\", 4) == 0) strncpy(buf, t + 4, buf_len); else strncpy(buf, t, buf_len); buf[buf_len - 1] = '\0'; free(t); to_forward_slash(buf); return 0; #endif }
static void cmd_ctrl_m(key_info_t key_info, keys_info_t *keys_info) { char* p; int save_hist = !keys_info->mapped; stop_completion(); werase(status_bar); wnoutrefresh(status_bar); if((!input_stat.line || !input_stat.line[0]) && sub_mode == MENU_CMD_SUBMODE) { leave_cmdline_mode(); return; } p = input_stat.line ? to_multibyte(input_stat.line) : NULL; leave_cmdline_mode(); if(prev_mode == VISUAL_MODE && sub_mode != VSEARCH_FORWARD_SUBMODE && sub_mode != VSEARCH_BACKWARD_SUBMODE) leave_visual_mode(curr_stats.save_msg, 1, 0); if(sub_mode == CMD_SUBMODE || sub_mode == MENU_CMD_SUBMODE) { char* s = (p != NULL) ? p : ""; while(*s == ' ' || *s == ':') s++; if(sub_mode == CMD_SUBMODE) curr_stats.save_msg = exec_commands(s, curr_view, save_hist, GET_COMMAND); else curr_stats.save_msg = exec_commands(s, curr_view, save_hist, GET_MENU_COMMAND); } else if(sub_mode == PROMPT_SUBMODE) { prompt_cb cb; if(p != NULL && p[0] != '\0') save_prompt_history(p); modes_post(); modes_pre(); cb = (prompt_cb)sub_mode_ptr; cb(p); } else if(!cfg.inc_search || prev_mode == VIEW_MODE) { if(sub_mode == SEARCH_FORWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_FSEARCH_PATTERN); } else if(sub_mode == SEARCH_BACKWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_BSEARCH_PATTERN); } else if(sub_mode == MENU_SEARCH_FORWARD_SUBMODE || sub_mode == MENU_SEARCH_BACKWARD_SUBMODE) { curr_stats.need_redraw = 1; search_menu_list(p, sub_mode_ptr); } else if(sub_mode == VSEARCH_FORWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_VFSEARCH_PATTERN); } else if(sub_mode == VSEARCH_BACKWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_VBSEARCH_PATTERN); } else if(sub_mode == VIEW_SEARCH_FORWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_VWFSEARCH_PATTERN); } else if(sub_mode == VIEW_SEARCH_BACKWARD_SUBMODE) { curr_stats.save_msg = exec_command(p, curr_view, GET_VWBSEARCH_PATTERN); } } free(p); }
static void input_line_changed(void) { static wchar_t *previous; if(!cfg.inc_search || !input_stat.search_mode) return; if(prev_mode != MENU_MODE) { curr_view->top_line = input_stat.old_top; curr_view->list_pos = input_stat.old_pos; } else { load_menu_pos(); } if(input_stat.line == NULL || input_stat.line[0] == L'\0') { if(cfg.hl_search) { clean_selected_files(curr_view); draw_dir_list(curr_view, curr_view->top_line); move_to_list_pos(curr_view, curr_view->list_pos); } free(previous); previous = NULL; } else if(previous == NULL || wcscmp(previous, input_stat.line) != 0) { char *p; free(previous); previous = my_wcsdup(input_stat.line); p = to_multibyte(input_stat.line); if(sub_mode == SEARCH_FORWARD_SUBMODE) exec_command(p, curr_view, GET_FSEARCH_PATTERN); else if(sub_mode == SEARCH_BACKWARD_SUBMODE) exec_command(p, curr_view, GET_BSEARCH_PATTERN); else if(sub_mode == MENU_SEARCH_FORWARD_SUBMODE || sub_mode == MENU_SEARCH_BACKWARD_SUBMODE) search_menu_list(p, sub_mode_ptr); else if(sub_mode == VSEARCH_FORWARD_SUBMODE) exec_command(p, curr_view, GET_VFSEARCH_PATTERN); else if(sub_mode == VSEARCH_BACKWARD_SUBMODE) exec_command(p, curr_view, GET_VBSEARCH_PATTERN); free(p); } if(prev_mode != MENU_MODE) { draw_dir_list(curr_view, curr_view->top_line); move_to_list_pos(curr_view, curr_view->list_pos); } else { menu_redraw(); } }
/* Callback-like function, which is called every time input line is changed. */ static void input_line_changed(void) { static wchar_t *previous; if(!cfg.inc_search || (!input_stat.search_mode && sub_mode != FILTER_SUBMODE)) return; set_view_port(); if(input_stat.line == NULL || input_stat.line[0] == L'\0') { if(cfg.hl_search) { /* clear selection */ if(prev_mode != MENU_MODE) { clean_selected_files(curr_view); } else { search_menu_list("", sub_mode_ptr); } } free(previous); previous = NULL; if(sub_mode == FILTER_SUBMODE) { set_local_filter(""); } } else if(previous == NULL || wcscmp(previous, input_stat.line) != 0) { char *mbinput; free(previous); previous = my_wcsdup(input_stat.line); mbinput = to_multibyte(input_stat.line); switch(sub_mode) { case SEARCH_FORWARD_SUBMODE: exec_command(mbinput, curr_view, GET_FSEARCH_PATTERN); break; case SEARCH_BACKWARD_SUBMODE: exec_command(mbinput, curr_view, GET_BSEARCH_PATTERN); break; case VSEARCH_FORWARD_SUBMODE: exec_command(mbinput, curr_view, GET_VFSEARCH_PATTERN); break; case VSEARCH_BACKWARD_SUBMODE: exec_command(mbinput, curr_view, GET_VBSEARCH_PATTERN); break; case MENU_SEARCH_FORWARD_SUBMODE: case MENU_SEARCH_BACKWARD_SUBMODE: search_menu_list(mbinput, sub_mode_ptr); break; case FILTER_SUBMODE: set_local_filter(mbinput); break; default: assert("Unexpected filter type."); break; } free(mbinput); } if(prev_mode != MENU_MODE && prev_mode != VISUAL_MODE) { redraw_current_view(); } else if(prev_mode != VISUAL_MODE) { menu_redraw(); } }
static void cmd_ctrl_m(key_info_t key_info, keys_info_t *keys_info) { /* TODO: refactor this cmd_ctrl_m() function. */ char* p; stop_completion(); werase(status_bar); wnoutrefresh(status_bar); if((!input_stat.line || !input_stat.line[0]) && sub_mode == MENU_CMD_SUBMODE) { leave_cmdline_mode(); return; } p = input_stat.line ? to_multibyte(input_stat.line) : NULL; leave_cmdline_mode(); if(prev_mode == VISUAL_MODE && sub_mode != VSEARCH_FORWARD_SUBMODE && sub_mode != VSEARCH_BACKWARD_SUBMODE) leave_visual_mode(curr_stats.save_msg, 1, 0); save_input_to_history(keys_info, p); if(sub_mode == CMD_SUBMODE || sub_mode == MENU_CMD_SUBMODE) { char* s = (p != NULL) ? p : ""; while(*s == ' ' || *s == ':') s++; if(sub_mode == CMD_SUBMODE) curr_stats.save_msg = exec_commands(s, curr_view, GET_COMMAND); else curr_stats.save_msg = exec_commands(s, curr_view, GET_MENU_COMMAND); } else if(sub_mode == PROMPT_SUBMODE) { finish_prompt_submode(p); } else if(sub_mode == FILTER_SUBMODE) { if(cfg.inc_search) { local_filter_accept(curr_view); } else { local_filter_apply(curr_view, p); load_saving_pos(curr_view, 1); } } else if(!cfg.inc_search || prev_mode == VIEW_MODE) { switch(sub_mode) { case SEARCH_FORWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_FSEARCH_PATTERN); break; case SEARCH_BACKWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_BSEARCH_PATTERN); break; case VSEARCH_FORWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_VFSEARCH_PATTERN); break; case VSEARCH_BACKWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_VBSEARCH_PATTERN); break; case VIEW_SEARCH_FORWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_VWFSEARCH_PATTERN); break; case VIEW_SEARCH_BACKWARD_SUBMODE: curr_stats.save_msg = exec_command(p, curr_view, GET_VWBSEARCH_PATTERN); break; case MENU_SEARCH_FORWARD_SUBMODE: case MENU_SEARCH_BACKWARD_SUBMODE: curr_stats.need_update = UT_FULL; search_menu_list(p, sub_mode_ptr); break; default: assert(0 && "Unknown command line submode."); break; } } else if(cfg.inc_search && input_stat.search_mode) { /* In case of successful search and 'hlsearch' option set, a message like * "n files selected" is printed automatically. */ if(curr_view->matches == 0 || !cfg.hl_search) { print_search_msg(curr_view, is_backward_search(sub_mode)); curr_stats.save_msg = 1; } } free(p); }