diff options
author | Gerald Combs <gerald@wireshark.org> | 2006-03-08 20:55:32 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2006-03-08 20:55:32 +0000 |
commit | 9406c5db24b03444140ab81fdb13f6a186e1e8a5 (patch) | |
tree | b35df42ea208c1120a98c32020fae4c9b2e751be | |
parent | def11f9418610a95bccc68e5a31a32bb335099be (diff) |
Use Unicode for all native Win32 calls. Unicode Windows applications
use UTF-16 internally and GTK+ 2.x uses UTF-8, which means we have to
do a lots of conversions.
Add utf_8to16() and utf_16to8 convenience functions to strutil.c.
svn path=/trunk/; revision=17534
-rw-r--r-- | config.h.win32 | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-dcerpc.c | 4 | ||||
-rw-r--r-- | epan/filesystem.c | 12 | ||||
-rw-r--r-- | epan/libethereal.def | 2 | ||||
-rw-r--r-- | epan/strutil.c | 91 | ||||
-rw-r--r-- | epan/strutil.h | 22 | ||||
-rw-r--r-- | gtk/font_utils.c | 10 | ||||
-rw-r--r-- | gtk/main.c | 5 | ||||
-rw-r--r-- | gtk/webbrowser.c | 5 | ||||
-rw-r--r-- | gtk/win32-file-dlg.c | 259 |
10 files changed, 279 insertions, 135 deletions
diff --git a/config.h.win32 b/config.h.win32 index dcd9094f40..794f18dbce 100644 --- a/config.h.win32 +++ b/config.h.win32 @@ -20,6 +20,10 @@ #define __STDC__ 0 #endif +/* Use Unicode in Windows runtime functions. */ +#define UNICODE 1 +#define _UNICODE 1 + /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index f1a3eec786..85067b3e0b 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -486,12 +486,12 @@ int ResolveWin32UUID(e_uuid_t if_id, char *UUID_NAME, int UUID_NAME_MAX_LEN) char REG_UUID_NAME[MAX_PATH]; HKEY hKey = NULL; DWORD UUID_MAX_SIZE = MAX_PATH; - char REG_UUID_STR[MAX_PATH]; + TCHAR REG_UUID_STR[MAX_PATH]; if(UUID_NAME_MAX_LEN < 2) return 0; REG_UUID_NAME[0] = '\0'; - g_snprintf(REG_UUID_STR, MAX_PATH, "SOFTWARE\\Classes\\Interface\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + _snwprintf(REG_UUID_STR, MAX_PATH, "SOFTWARE\\Classes\\Interface\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", if_id.Data1, if_id.Data2, if_id.Data3, if_id.Data4[0], if_id.Data4[1], if_id.Data4[2], if_id.Data4[3], diff --git a/epan/filesystem.c b/epan/filesystem.c index a983f5fee1..2a86ae377a 100644 --- a/epan/filesystem.c +++ b/epan/filesystem.c @@ -47,6 +47,8 @@ #ifndef _WIN32 #include <pwd.h> +#include <tchar.h> +#include "epan/strutil.h" #endif #include "filesystem.h" @@ -220,14 +222,20 @@ init_progfile_dir(const char *arg0 char *dir_end; char *path; #ifdef _WIN32 - char prog_pathname[_MAX_PATH+2]; + TCHAR prog_pathname_w[_MAX_PATH+2]; size_t progfile_dir_len; + char *prog_pathname; /* * Attempt to get the full pathname of the currently running * program. */ - if (GetModuleFileName(NULL, prog_pathname, sizeof prog_pathname) != 0) { + if (GetModuleFileName(NULL, prog_pathname_w, sizeof prog_pathname_w) != 0) { + /* + * XXX - Should we use g_utf16_to_utf8(), as in + * getenv_utf8()? + */ + prog_pathname = utf_16to8(prog_pathname_w); /* * We got it; strip off the last component, which would be * the file name of the executable, giving us the pathname diff --git a/epan/libethereal.def b/epan/libethereal.def index c2241d22a3..755642973f 100644 --- a/epan/libethereal.def +++ b/epan/libethereal.def @@ -699,6 +699,8 @@ tvb_strnlen tvb_strsize UnregRejectReason_vals DATA UnregRequestReason_vals DATA +utf_8to16 +utf_16to8 vals_pdu_type DATA vals_status DATA val_to_str diff --git a/epan/strutil.c b/epan/strutil.c index 1ac18f9559..1572717dc4 100644 --- a/epan/strutil.c +++ b/epan/strutil.c @@ -33,6 +33,11 @@ #include "strutil.h" #include "emem.h" +#ifdef _WIN32 +#include <windows.h> +#include <tchar.h> +#include <wchar.h> +#endif /* * Given a pointer into a data buffer, and to the end of the buffer, @@ -652,3 +657,89 @@ g_strlcat(gchar *dst, gchar *src, gsize size) } #endif +#ifdef _WIN32 + +/* + * XXX - Should we use g_utf8_to_utf16() and g_utf16_to_utf8() + * instead? The goal of the functions below was to provide simple + * wrappers for UTF-8 <-> UTF-16 conversion without making the + * caller worry about freeing up memory afterward. + */ + +/* Convert from UTF-8 to UTF-16. */ +wchar_t * utf_8to16(const char *utf8str) { + static wchar_t *utf16buf[3]; + static int utf16buf_len[3]; + static int idx; + + if (utf8str == NULL) + return NULL; + + idx = (idx + 1) % 3; + + /* + * Allocate the buffer if it's not already allocated. + */ + if (utf16buf[idx] == NULL) { + utf16buf_len[idx] = INITIAL_FMTBUF_SIZE; + utf16buf[idx] = g_malloc(utf16buf_len[idx] * sizeof(wchar_t)); + } + + while (MultiByteToWideChar(CP_UTF8, 0, utf8str, + -1, NULL, 0) >= utf16buf_len[idx]) { + /* + * Double the buffer's size if it's not big enough. + * The size of the buffer starts at 128, so doubling its size + * adds at least another 128 bytes, which is more than enough + * for one more character plus a terminating '\0'. + */ + utf16buf_len[idx] *= 2; + utf16buf[idx] = g_realloc(utf16buf[idx], utf16buf_len[idx]); + } + + if (MultiByteToWideChar(CP_UTF8, 0, utf8str, + -1, utf16buf[idx], utf16buf_len[idx]) == 0) + return NULL; + + return utf16buf[idx]; +} + +/* Convert from UTF-16 to UTF-8. */ +gchar * utf_16to8(const wchar_t *utf16str) { + static gchar *utf8buf[3]; + static int utf8buf_len[3]; + static int idx; + + if (utf16str == NULL) + return NULL; + + idx = (idx + 1) % 3; + + /* + * Allocate the buffer if it's not already allocated. + */ + if (utf8buf[idx] == NULL) { + utf8buf_len[idx] = INITIAL_FMTBUF_SIZE; + utf8buf[idx] = g_malloc(utf8buf_len[idx]); + } + + while (WideCharToMultiByte(CP_UTF8, 0, utf16str, -1, + NULL, 0, NULL, NULL) >= utf8buf_len[idx]) { + /* + * Double the buffer's size if it's not big enough. + * The size of the buffer starts at 128, so doubling its size + * adds at least another 128 bytes, which is more than enough + * for one more character plus a terminating '\0'. + */ + utf8buf_len[idx] *= 2; + utf8buf[idx] = g_realloc(utf8buf[idx], utf8buf_len[idx]); + } + + if (WideCharToMultiByte(CP_UTF8, 0, utf16str, -1, + utf8buf[idx], utf8buf_len[idx], NULL, NULL) == 0) + return NULL; + + return utf8buf[idx]; +} + +#endif
\ No newline at end of file diff --git a/epan/strutil.h b/epan/strutil.h index 3fbc2437fd..2bd4e59f38 100644 --- a/epan/strutil.h +++ b/epan/strutil.h @@ -166,4 +166,26 @@ gsize g_strlcat(gchar *dst, gchar *src, gsize size); (((c<0x20)||(c>=0x80))?FALSE:TRUE) #endif +#ifdef _WIN32 + +/** Given a UTF-8 string, convert it to UTF-16. This is meant to be used + * to convert between GTK+ 2.x (UTF-8) to Windows (UTF-16). + * + * @param utf8str The string to convert. May be NULL. + * @return The string converted to UTF-16. If utf8str is NULL, returns + * NULL. The return value should NOT be freed by the caller. + */ +wchar_t * utf_8to16(const char *utf8str); + +/** Given a UTF-16 string, convert it to UTF-8. This is meant to be used + * to convert between GTK+ 2.x (UTF-8) to Windows (UTF-16). + * + * @param utf16str The string to convert. May be NULL. + * @return The string converted to UTF-8. If utf16str is NULL, returns + * NULL. The return value should NOT be freed by the caller. + */ +gchar * utf_16to8(const wchar_t *utf16str); + +#endif /* _WIN32 */ + #endif /* __STRUTIL_H__ */ diff --git a/gtk/font_utils.c b/gtk/font_utils.c index 9aeda13b90..732783d114 100644 --- a/gtk/font_utils.c +++ b/gtk/font_utils.c @@ -35,6 +35,8 @@ #ifdef _WIN32 #include <windows.h> +#include <tchar.h> +#include <epan/strutil.h> #endif #include "main.h" @@ -583,10 +585,10 @@ static int get_windows_font_gtk1(char *fontspec, int fontspec_len) HDC h_dc; HGDIOBJ h_font; TEXTMETRIC tm; - char name[NAME_BUFFER_LEN]; + TCHAR name[NAME_BUFFER_LEN]; int len, pix_height; - h_dc = CreateDC("DISPLAY", NULL, NULL, NULL); + h_dc = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); if (h_dc == NULL) return 1; h_font = GetStockObject(DEFAULT_GUI_FONT); if (h_font == NULL || !SelectObject(h_dc, h_font)) { @@ -604,8 +606,8 @@ static int get_windows_font_gtk1(char *fontspec, int fontspec_len) } pix_height = tm.tmHeight; DeleteDC(h_dc); - g_snprintf(fontspec, fontspec_len, "-*-%s-*-*-*-*-%i-*-*-*-p-*-iso8859-1", name, - pix_height); + g_snprintf(fontspec, fontspec_len, "-*-%s-*-*-*-*-%i-*-*-*-p-*-iso8859-1", + utf_16to8(name), pix_height); return 0; } diff --git a/gtk/main.c b/gtk/main.c index 1c5e8e2ff0..ebda7a10b5 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -99,6 +99,7 @@ #ifdef _WIN32 #include "capture-wpcap.h" #include "capture_wpcap_packet.h" +#include <tchar.h> /* Needed for Unicode */ #if GTK_MAJOR_VERSION >= 2 #include <commctrl.h> #endif /* GTK_MAJOR_VERSION >= 2 */ @@ -2812,7 +2813,7 @@ WinMain (struct HINSTANCE__ *hInstance, InitCommonControlsEx(&comm_ctrl); /* RichEd20.DLL is needed for filter entries. */ - LoadLibrary("riched20.dll"); + LoadLibrary(_T("riched20.dll")); #endif /* GTK_MAJOR_VERSION >= 2 */ has_console = FALSE; @@ -2845,7 +2846,7 @@ create_console(void) the message(s) we put in there). */ atexit(destroy_console); - SetConsoleTitle("Ethereal Debug Console"); + SetConsoleTitle(_T("Ethereal Debug Console")); } } diff --git a/gtk/webbrowser.c b/gtk/webbrowser.c index 5632ca87ea..e0be890eb3 100644 --- a/gtk/webbrowser.c +++ b/gtk/webbrowser.c @@ -50,6 +50,9 @@ #if defined(G_OS_WIN32) /* Win32 - use Windows shell services to start a browser */ #include <windows.h> +/* We're using Unicode */ +#include <tchar.h> +#include <epan/strutil.h> /* if WIN32_LEAN_AND_MEAN is defined, shellapi.h is needed too */ #include <shellapi.h> #elif defined (HAVE_OS_X_FRAMEWORKS) @@ -95,7 +98,7 @@ browser_open_url (const gchar *url) { #if defined(G_OS_WIN32) - return ((gint) ShellExecute (HWND_DESKTOP, "open", url, NULL, NULL, SW_SHOWNORMAL) > 32); + return ((gint) ShellExecute (HWND_DESKTOP, _T("open"), utf_8to16(url), NULL, NULL, SW_SHOWNORMAL) > 32); #elif defined(HAVE_OS_X_FRAMEWORKS) diff --git a/gtk/win32-file-dlg.c b/gtk/win32-file-dlg.c index bd649188a7..6e612749a0 100644 --- a/gtk/win32-file-dlg.c +++ b/gtk/win32-file-dlg.c @@ -36,6 +36,8 @@ #include <windowsx.h> #include <commdlg.h> #include <richedit.h> +#include <tchar.h> +#include <wchar.h> #include <stdlib.h> #include <sys/stat.h> @@ -52,6 +54,7 @@ #include "print.h" #include "simple_dialog.h" #include "util.h" +#include "epan/strutil.h" #include "file_dlg.h" #include "main.h" @@ -61,7 +64,6 @@ #include "win32-file-dlg.h" - typedef enum { merge_append, merge_chrono, @@ -72,17 +74,43 @@ typedef enum { * XXX - There should be separate open and save lists, and they should * come from Wiretap. */ -#define FILE_TYPE_LIST \ - "Accellent 5Views (*.5vw)\0" "*.5vw\0" \ - "Ethereal/tcpdump (*.cap, *.pcap)\0" "*.cap;*.pcap\0" \ - "Novell LANalyzer (*.tr1)\0" "*.tr1\0" \ - "NG/NAI Sniffer (*.cap, *.enc, *.trc)\0" "*.cap;*.enc;*.trc\0" \ - "Sun snoop (*.snoop)\0" "*.snoop\0" \ - "WildPackets EtherPeek (*.pkt)\0" "*.pkt\0" \ - "All Files (*.*)\0" "*.*\0" \ - "\0" +#define FILE_TYPES_OPEN \ + _T("Accellent 5Views (*.5vw)\0") _T("*.5vw\0") \ + _T("Ethereal/tcpdump (*.cap, *.pcap)\0") _T("*.cap;*.pcap\0") \ + _T("Novell LANalyzer (*.tr1)\0") _T("*.tr1\0") \ + _T("NG/NAI Sniffer (*.cap, *.enc, *.trc)\0") _T("*.cap;*.enc;*.trc\0") \ + _T("Sun snoop (*.snoop)\0") _T("*.snoop\0") \ + _T("WildPackets EtherPeek (*.pkt)\0") _T("*.pkt\0") \ + _T("All Files (*.*)\0") _T("*.*\0") + +#define FILE_OPEN_DEFAULT 2 /* Ethereal/tcpdump */ + +#define FILE_TYPES_SAVE FILE_TYPES_OPEN + +#define FILE_SAVE_DEFAULT FILE_OPEN_DEFAULT + +#define FILE_TYPES_MERGE FILE_TYPES_OPEN + +#define FILE_MERGE_DEFAULT FILE_OPEN_DEFAULT + +#define FILE_TYPES_EXPORT \ + _T("Plain text (*.txt)\0") _T("*.txt\0") \ + _T("PostScript (*.ps)\0") _T("*.ps\0") \ + _T("CSV (Comma Separated Values summary (*.csv)\0") _T("*.csv\0") \ + _T("PSML (XML packet summary) (*.psml)\0") _T("*.psml\0") \ + _T("PDML (XML packet detail) (*.pdml)\0") _T("*.pdml\0") + +#define FILE_TYPES_RAW \ + _T("Raw data (*.bin, *.dat, *.raw)\0") _T("*.bin;*.dat;*.raw\0") \ + _T("All Files (*.*)\0") _T("*.*\0") + +#define FILE_RAW_DEFAULT 1 -#define FILE_TYPE_DEFAULT 2 /* Ethereal/tcpdump */ +#define FILE_TYPES_COLOR \ + _T("Text Files (*.txt)\0") _T("*.txt\0") \ + _T("All Files (*.*)\0") _T("*.*\0") + +#define FILE_DEFAULT_COLOR 2 static UINT CALLBACK open_file_hook_proc(HWND of_hwnd, UINT ui_msg, WPARAM w_param, LPARAM l_param); @@ -114,9 +142,9 @@ static HWND g_sf_hwnd = NULL; gboolean win32_open_file (HWND h_wnd) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; + TCHAR file_name[MAX_PATH] = _T(""); int err; - char *dirname; + char *dirname; /* XXX - Check for version and set OPENFILENAME_SIZE_VERSION_400 where appropriate */ @@ -129,37 +157,38 @@ win32_open_file (HWND h_wnd) { ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = FILE_TYPE_LIST; + ofn.lpstrFilter = FILE_TYPES_OPEN; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = FILE_TYPE_DEFAULT; + ofn.nFilterIndex = FILE_OPEN_DEFAULT; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; + /* XXX - Assuming that we're using UTF8 elsewhere. */ if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn.lpstrInitialDir = prefs.gui_fileopen_dir; + ofn.lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); } else { ofn.lpstrInitialDir = NULL; } - ofn.lpstrTitle = "Ethereal: Select a capture file"; + ofn.lpstrTitle = _T("Ethereal: Select a capture file"); ofn.Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK; ofn.lpstrDefExt = NULL; ofn.lpfnHook = open_file_hook_proc; - ofn.lpTemplateName = "ETHEREAL_OPENFILENAME_TEMPLATE"; + ofn.lpTemplateName = _T("ETHEREAL_OPENFILENAME_TEMPLATE"); /* XXX - Get our filter */ if (GetOpenFileName(&ofn)) { - if (cf_open(&cfile, file_name, FALSE, &err) != CF_OK) { + if (cf_open(&cfile, utf_16to8(file_name), FALSE, &err) != CF_OK) { return FALSE; } switch (cf_read(&cfile)) { case CF_READ_OK: case CF_READ_ERROR: - dirname = get_dirname(file_name); + dirname = get_dirname(utf_16to8(file_name)); set_last_open_dir(dirname); return TRUE; break; @@ -172,7 +201,7 @@ win32_open_file (HWND h_wnd) { void win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer action_after_save_data) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; + TCHAR file_name[MAX_PATH] = _T(""); gchar *dirname; /* XXX - Check for version and set OPENFILENAME_SIZE_VERSION_400 @@ -182,26 +211,26 @@ win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer a ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = FILE_TYPE_LIST; + ofn.lpstrFilter = FILE_TYPES_SAVE; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = FILE_TYPE_DEFAULT; + ofn.nFilterIndex = FILE_SAVE_DEFAULT; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn.lpstrInitialDir = prefs.gui_fileopen_dir; + ofn.lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); } else { ofn.lpstrInitialDir = NULL; } - ofn.lpstrTitle = "Ethereal: Save file as"; + ofn.lpstrTitle = _T("Ethereal: Save file as"); ofn.Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; ofn.lpstrDefExt = NULL; ofn.lpfnHook = save_as_file_hook_proc; - ofn.lpTemplateName = "ETHEREAL_SAVEFILENAME_TEMPLATE"; + ofn.lpTemplateName = _T("ETHEREAL_SAVEFILENAME_TEMPLATE"); if (GetSaveFileName(&ofn)) { g_sf_hwnd = NULL; @@ -209,14 +238,14 @@ win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer a range) to the file with the specified name. */ /* XXX - If we're overwriting a file, GetSaveFileName does the standard windows confirmation. cf_save() then rejects the overwrite. */ - if (cf_save(&cfile, file_name, &range, filetype, FALSE) != CF_OK) { + if (cf_save(&cfile, utf_16to8(file_name), &range, filetype, FALSE) != CF_OK) { /* The write failed. Try again. */ win32_save_as_file(h_wnd, action_after_save, action_after_save_data); return; } /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name); /* Overwrites cf_name */ + dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ set_last_open_dir(dirname); /* we have finished saving, do we have pending things to do? */ @@ -257,7 +286,7 @@ win32_save_as_file(HWND h_wnd, action_after_save_e action_after_save, gpointer a void win32_merge_file (HWND h_wnd) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; + TCHAR file_name[MAX_PATH] = _T(""); char *dirname; cf_status_t merge_status; char *in_filenames[2]; @@ -273,26 +302,26 @@ win32_merge_file (HWND h_wnd) { ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = FILE_TYPE_LIST; + ofn.lpstrFilter = FILE_TYPES_MERGE; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = FILE_TYPE_DEFAULT; + ofn.nFilterIndex = FILE_MERGE_DEFAULT; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn.lpstrInitialDir = prefs.gui_fileopen_dir; + ofn.lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); } else { ofn.lpstrInitialDir = NULL; } - ofn.lpstrTitle = "Ethereal: Merge with capture file"; + ofn.lpstrTitle = _T("Ethereal: Merge with capture file"); ofn.Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK; ofn.lpstrDefExt = NULL; ofn.lpfnHook = merge_file_hook_proc; - ofn.lpTemplateName = "ETHEREAL_MERGEFILENAME_TEMPLATE"; + ofn.lpTemplateName = _T("ETHEREAL_MERGEFILENAME_TEMPLATE"); if (GetOpenFileName(&ofn)) { filetype = cfile.cd_t; @@ -303,20 +332,20 @@ win32_merge_file (HWND h_wnd) { switch (merge_action) { case merge_append: /* append file */ - in_filenames[0] = file_name; + in_filenames[0] = utf_16to8(file_name); in_filenames[1] = cfile.filename; merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, TRUE); break; case merge_chrono: /* chonological order */ in_filenames[0] = cfile.filename; - in_filenames[1] = file_name; + in_filenames[1] = utf_16to8(file_name); merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, FALSE); break; case merge_prepend: /* prepend file */ in_filenames[0] = cfile.filename; - in_filenames[1] = file_name; + in_filenames[1] = utf_16to8(file_name); merge_status = cf_merge_files(&tmpname, 2, in_filenames, filetype, TRUE); break; default: @@ -341,8 +370,6 @@ win32_merge_file (HWND h_wnd) { try again. */ // if (rfcode != NULL) // dfilter_free(rfcode); - sprintf(file_name, "failed open: %s (%d)", tmpname, err); - MessageBox(NULL, file_name, "Eth", MB_OK); return; } @@ -354,7 +381,7 @@ win32_merge_file (HWND h_wnd) { switch (cf_read(&cfile)) { case CF_READ_OK: case CF_READ_ERROR: - dirname = get_dirname(file_name); + dirname = get_dirname(utf_16to8(file_name)); set_last_open_dir(dirname); menu_name_resolution_changed(); break; @@ -367,7 +394,7 @@ win32_merge_file (HWND h_wnd) { void win32_export_file(HWND h_wnd, export_type_e export_type) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; + TCHAR file_name[MAX_PATH] = _T(""); char *dirname; cf_print_status_t status; @@ -377,13 +404,7 @@ win32_export_file(HWND h_wnd, export_type_e export_type) { ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); - ofn.lpstrFilter = - "Plain text (*.txt)\0" "*.txt\0" - "PostScript (*.ps)\0" "*.ps\0" - "CSV (Comma Separated Values summary (*.csv)\0" "*.csv\0" - "PSML (XML packet summary) (*.psml)\0" "*.psml\0" - "PDML (XML packet detail) (*.pdml)\0" "*.pdml\0" - "\0"; + ofn.lpstrFilter = FILE_TYPES_EXPORT; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = export_type; @@ -392,23 +413,23 @@ win32_export_file(HWND h_wnd, export_type_e export_type) { ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn.lpstrInitialDir = prefs.gui_fileopen_dir; + ofn.lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); } else { ofn.lpstrInitialDir = NULL; } - ofn.lpstrTitle = "Ethereal: Export"; + ofn.lpstrTitle = _T("Ethereal: Export"); ofn.Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; ofn.lpstrDefExt = NULL; ofn.lpfnHook = export_file_hook_proc; - ofn.lpTemplateName = "ETHEREAL_EXPORTFILENAME_TEMPLATE"; + ofn.lpTemplateName = _T("ETHEREAL_EXPORTFILENAME_TEMPLATE"); /* Fill in our print (and export) args */ print_args.format = PR_FMT_TEXT; print_args.to_file = TRUE; - print_args.file = file_name; + print_args.file = utf_16to8(file_name); print_args.cmd = NULL; print_args.print_summary = TRUE; print_args.print_dissections = print_dissections_as_displayed; @@ -457,7 +478,7 @@ win32_export_file(HWND h_wnd, export_type_e export_type) { break; } /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name); /* Overwrites cf_name */ + dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ set_last_open_dir(dirname); } } @@ -465,7 +486,7 @@ win32_export_file(HWND h_wnd, export_type_e export_type) { void win32_export_raw_file(HWND h_wnd) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; + TCHAR file_name[MAX_PATH] = _T(""); char *dirname; const guint8 *data_p = NULL; const char *file = NULL; @@ -482,30 +503,27 @@ win32_export_raw_file(HWND h_wnd) { ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = - "Raw data (*.bin, *.dat, *.raw)\0" "*.bin;*.dat;*.raw\0" - "All Files (*.*)\0" "*.*\0" - "\0"; + ofn.lpstrFilter = FILE_TYPES_RAW; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 1; + ofn.nFilterIndex = FILE_RAW_DEFAULT; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; if (prefs.gui_fileopen_style == FO_STYLE_SPECIFIED && prefs.gui_fileopen_dir[0] != '\0') { - ofn.lpstrInitialDir = prefs.gui_fileopen_dir; + ofn.lpstrInitialDir = utf_8to16(prefs.gui_fileopen_dir); } else { ofn.lpstrInitialDir = NULL; } - ofn.lpstrTitle = "Ethereal: Export Raw Data"; + ofn.lpstrTitle = _T("Ethereal: Export Raw Data"); ofn.Flags = OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; ofn.lpstrDefExt = NULL; ofn.lCustData = cfile.finfo_selected->length; ofn.lpfnHook = export_raw_file_hook_proc; - ofn.lpTemplateName = "ETHEREAL_EXPORTRAWFILENAME_TEMPLATE"; + ofn.lpTemplateName = _T("ETHEREAL_EXPORTRAWFILENAME_TEMPLATE"); /* * XXX - The GTK+ code uses get_byte_view_data_and_length(). We just @@ -513,10 +531,9 @@ win32_export_raw_file(HWND h_wnd) { */ if (GetSaveFileName(&ofn)) { - data_p = tvb_get_ptr(cfile.finfo_selected->ds_tvb, 0, -1) + cfile.finfo_selected->start; - fd = open(file_name, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666); + fd = open(utf_16to8(file_name), O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666); if (fd == -1) { open_failure_alert_box(file, errno, TRUE); return; @@ -532,7 +549,7 @@ win32_export_raw_file(HWND h_wnd) { } /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name); /* Overwrites cf_name */ + dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ set_last_open_dir(dirname); } } @@ -540,27 +557,24 @@ win32_export_raw_file(HWND h_wnd) { void win32_export_color_file(HWND h_wnd) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; - char *dirname; + TCHAR file_name[MAX_PATH] = _T(""); + gchar *dirname; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = - "Text Files (*.txt)\0" "*.txt\0" - "All Files (*.*)\0" "*.*\0" - "\0"; + ofn.lpstrFilter = FILE_TYPES_COLOR; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 2; + ofn.nFilterIndex = FILE_DEFAULT_COLOR; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; - ofn.lpstrTitle = "Ethereal: Export Color Filters"; + ofn.lpstrTitle = _T("Ethereal: Export Color Filters"); ofn.Flags = OFN_ENABLESIZING | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; @@ -572,11 +586,11 @@ win32_export_color_file(HWND h_wnd) { /* XXX - Support marked filters */ if (GetSaveFileName(&ofn)) { - if (!color_filters_export(file_name, FALSE)) + if (!color_filters_export(utf_16to8(file_name), FALSE)) return; /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name); /* Overwrites cf_name */ + dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ set_last_open_dir(dirname); } } @@ -584,27 +598,24 @@ win32_export_color_file(HWND h_wnd) { void win32_import_color_file(HWND h_wnd) { static OPENFILENAME ofn; - gchar file_name[MAX_PATH] = ""; - char *dirname; + TCHAR file_name[MAX_PATH] = _T(""); + gchar *dirname; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = h_wnd; ofn.hInstance = (HINSTANCE) GetWindowLong(h_wnd, GWL_HINSTANCE); /* XXX - Grab the rest of the extension list from ethereal.nsi. */ - ofn.lpstrFilter = - "Text Files (*.txt)\0" "*.txt\0" - "All Files (*.*)\0" "*.*\0" - "\0"; + ofn.lpstrFilter = FILE_TYPES_COLOR; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 2; + ofn.nFilterIndex = FILE_DEFAULT_COLOR; ofn.lpstrFile = file_name; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; - ofn.lpstrTitle = "Ethereal: Import Color Filters"; + ofn.lpstrTitle = _T("Ethereal: Import Color Filters"); ofn.Flags = OFN_ENABLESIZING | OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK; @@ -614,11 +625,11 @@ win32_import_color_file(HWND h_wnd) { /* XXX - Support marked filters */ if (GetOpenFileName(&ofn)) { - if (!color_filters_import(file_name, NULL)) + if (!color_filters_import(utf_16to8(file_name), NULL)) return; /* Save the directory name for future file dialogs. */ - dirname = get_dirname(file_name); /* Overwrites cf_name */ + dirname = get_dirname(utf_16to8(file_name)); /* Overwrites cf_name */ set_last_open_dir(dirname); } } @@ -736,8 +747,8 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { const struct wtap_pkthdr *phdr; int err = 0; gchar *err_info; + TCHAR string_buff[PREVIEW_STR_MAX]; long data_offset; - gchar string_buff[PREVIEW_STR_MAX]; guint packet = 0; guint64 filesize; time_t ti_time; @@ -764,35 +775,34 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { for (i = EWFD_PTX_FILENAME; i <= EWFD_PTX_ELAPSED; i++) { cur_ctrl = GetDlgItem(of_hwnd, i); if (cur_ctrl) { - SetWindowText(cur_ctrl, "-"); + SetWindowText(cur_ctrl, _T("-")); } } if (enable) { cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FILENAME); - SetWindowText(cur_ctrl, get_basename(preview_file)); + SetWindowText(cur_ctrl, utf_8to16(get_basename(preview_file))); cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FORMAT); wth = wtap_open_offline(preview_file, &err, &err_info, TRUE); if (cur_ctrl && wth == NULL) { if(err == WTAP_ERR_FILE_UNKNOWN_FORMAT) { - SetWindowText(cur_ctrl, "unknown file format"); + SetWindowText(cur_ctrl, _T("unknown file format")); } else { - SetWindowText(cur_ctrl, "error opening file"); + SetWindowText(cur_ctrl, _T("error opening file")); } return FALSE; } /* size */ filesize = wtap_file_size(wth, &err); - g_snprintf(string_buff, PREVIEW_STR_MAX, "%" PRIu64 " bytes", filesize); + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%") _T(PRIu64) _T(" bytes"), filesize); cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_SIZE); SetWindowText(cur_ctrl, string_buff); /* type */ - g_snprintf(string_buff, PREVIEW_STR_MAX, "%s", wtap_file_type_string(wtap_file_type(wth))); cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_FORMAT); - SetWindowText(cur_ctrl, string_buff); + SetWindowText(cur_ctrl, utf_8to16(wtap_file_type_string(wtap_file_type(wth)))); time(&time_preview); while ( (wtap_read(wth, &err, &err_info, &data_offset)) ) { @@ -819,7 +829,7 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { } if(err != 0) { - g_snprintf(string_buff, PREVIEW_STR_MAX, "error after reading %u packets", packet); + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("error after reading %u packets"), packet); cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_PACKETS); SetWindowText(cur_ctrl, string_buff); wtap_close(wth); @@ -828,9 +838,9 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { /* packet count */ if(is_breaked) { - g_snprintf(string_buff, PREVIEW_STR_MAX, "more than %u packets (preview timeout)", packet); + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("more than %u packets (preview timeout)"), packet); } else { - g_snprintf(string_buff, PREVIEW_STR_MAX, "%u", packet); + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%u"), packet); } cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_PACKETS); SetWindowText(cur_ctrl, string_buff); @@ -838,8 +848,8 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { /* first packet */ ti_time = (long)start_time; ti_tm = localtime( &ti_time ); - g_snprintf(string_buff, PREVIEW_STR_MAX, - "%04d-%02d-%02d %02d:%02d:%02d", + _snwprintf(string_buff, PREVIEW_STR_MAX, + _T("%04d-%02d-%02d %02d:%02d:%02d"), ti_tm->tm_year + 1900, ti_tm->tm_mon + 1, ti_tm->tm_mday, @@ -852,14 +862,14 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { /* elapsed time */ elapsed_time = (unsigned int)(stop_time-start_time); if(elapsed_time/86400) { - g_snprintf(string_buff, PREVIEW_STR_MAX, "%02u days %02u:%02u:%02u", + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%02u days %02u:%02u:%02u"), elapsed_time/86400, elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60); } else { - g_snprintf(string_buff, PREVIEW_STR_MAX, "%02u:%02u:%02u", + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("%02u:%02u:%02u"), elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60); } if(is_breaked) { - g_snprintf(string_buff, PREVIEW_STR_MAX, "unknown"); + _snwprintf(string_buff, PREVIEW_STR_MAX, _T("unknown")); } cur_ctrl = GetDlgItem(of_hwnd, EWFD_PTX_ELAPSED); SetWindowText(cur_ctrl, string_buff); @@ -876,16 +886,17 @@ preview_set_filename(HWND of_hwnd, gchar *preview_file) { * in the "real" filter string in the case of a CBN_SELCHANGE notification message. */ void -filter_tb_syntax_check(HWND hwnd, gchar *filter_text) { - gchar *strval = NULL; +filter_tb_syntax_check(HWND hwnd, TCHAR *filter_text) { + TCHAR *strval = NULL; gint len; dfilter_t *dfp; /* If filter_text is non-NULL, use it. Otherwise, grab the text from * the window */ if (filter_text) { - strval = g_strdup(filter_text); - len = lstrlen(filter_text); + len = (lstrlen(filter_text) + 1) * sizeof(TCHAR); + strval = g_malloc(len); + memcpy(strval, filter_text, len); } else { len = GetWindowTextLength(hwnd); if (len > 0) { @@ -899,7 +910,7 @@ filter_tb_syntax_check(HWND hwnd, gchar *filter_text) { /* Default window background */ SendMessage(hwnd, EM_SETBKGNDCOLOR, (WPARAM) 1, COLOR_WINDOW); return; - } else if (dfilter_compile(strval, &dfp)) { /* colorize filter string entry */ + } else if (dfilter_compile(utf_16to8(strval), &dfp)) { /* colorize filter string entry */ if (dfp != NULL) dfilter_free(dfp); /* Valid (light green) */ @@ -917,7 +928,7 @@ static UINT CALLBACK open_file_hook_proc(HWND of_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { HWND cur_ctrl, parent; OFNOTIFY *notify = (OFNOTIFY *) l_param; - gchar sel_name[MAX_PATH]; + TCHAR sel_name[MAX_PATH]; switch(msg) { case WM_INITDIALOG: @@ -954,7 +965,7 @@ open_file_hook_proc(HWND of_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { selections, etc. */ parent = GetParent(of_hwnd); CommDlg_OpenSave_GetSpec(parent, sel_name, MAX_PATH); - preview_set_filename(of_hwnd, sel_name); + preview_set_filename(of_hwnd, utf_16to8(sel_name)); break; default: break; @@ -1031,7 +1042,7 @@ build_file_format_list(HWND sf_hwnd) { } /* OK, we can write it out in this type. */ - SendMessage(format_cb, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) wtap_file_type_string(ft)); + SendMessage(format_cb, CB_ADDSTRING, 0, (LPARAM) utf_8to16(wtap_file_type_string(ft))); SendMessage(format_cb, CB_SETITEMDATA, (LPARAM) index, (WPARAM) ft); if (ft == filetype) { /* Default to the same format as the file, if it's supported. */ @@ -1111,7 +1122,7 @@ static void range_update_dynamics(HWND dlg_hwnd, packet_range_t *range) { HWND cur_ctrl; gboolean filtered_active = FALSE; - gchar static_val[100]; + TCHAR static_val[100]; gint selected_num; cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_DISPLAYED_BTN); @@ -1121,24 +1132,24 @@ range_update_dynamics(HWND dlg_hwnd, packet_range_t *range) { /* RANGE_SELECT_ALL */ cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_ALL_PKTS_CAP); EnableWindow(cur_ctrl, !filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", cfile.count); + _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.count); SetWindowText(cur_ctrl, static_val); cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_ALL_PKTS_DISP); EnableWindow(cur_ctrl, filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->displayed_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_cnt); SetWindowText(cur_ctrl, static_val); /* RANGE_SELECT_CURR */ selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0; cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_SEL_PKT_CAP); EnableWindow(cur_ctrl, selected_num && !filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", selected_num ? 1 : 0); + _snwprintf(static_val, sizeof(static_val), _T("%u"), selected_num ? 1 : 0); SetWindowText(cur_ctrl, static_val); cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_SEL_PKT_DISP); EnableWindow(cur_ctrl, selected_num && filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", selected_num ? 1 : 0); + _snwprintf(static_val, sizeof(static_val), _T("%u"), selected_num ? 1 : 0); SetWindowText(cur_ctrl, static_val); /* RANGE_SELECT_MARKED */ @@ -1147,12 +1158,12 @@ range_update_dynamics(HWND dlg_hwnd, packet_range_t *range) { cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_CAP); EnableWindow(cur_ctrl, cfile.marked_count && !filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", cfile.marked_count); + _snwprintf(static_val, sizeof(static_val), _T("%u"), cfile.marked_count); SetWindowText(cur_ctrl, static_val); cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_MARKED_DISP); EnableWindow(cur_ctrl, cfile.marked_count && filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->displayed_marked_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_marked_cnt); SetWindowText(cur_ctrl, static_val); /* RANGE_SELECT_MARKED_RANGE */ @@ -1161,23 +1172,23 @@ range_update_dynamics(HWND dlg_hwnd, packet_range_t *range) { cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_CAP); EnableWindow(cur_ctrl, range->mark_range_cnt && !filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->mark_range_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->mark_range_cnt); SetWindowText(cur_ctrl, static_val); cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_FIRST_LAST_DISP); EnableWindow(cur_ctrl, range->displayed_mark_range_cnt && filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->displayed_mark_range_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_mark_range_cnt); SetWindowText(cur_ctrl, static_val); /* RANGE_SELECT_USER */ cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_CAP); EnableWindow(cur_ctrl, !filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->user_range_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->user_range_cnt); SetWindowText(cur_ctrl, static_val); cur_ctrl = GetDlgItem(dlg_hwnd, EWFD_RANGE_DISP); EnableWindow(cur_ctrl, filtered_active); - g_snprintf(static_val, sizeof(static_val), "%u", range->displayed_user_range_cnt); + _snwprintf(static_val, sizeof(static_val), _T("%u"), range->displayed_user_range_cnt); SetWindowText(cur_ctrl, static_val); } @@ -1281,7 +1292,7 @@ static UINT CALLBACK merge_file_hook_proc(HWND mf_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { HWND cur_ctrl, parent; OFNOTIFY *notify = (OFNOTIFY *) l_param; - gchar sel_name[MAX_PATH]; + TCHAR sel_name[MAX_PATH]; switch(msg) { case WM_INITDIALOG: @@ -1315,7 +1326,7 @@ merge_file_hook_proc(HWND mf_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { selections, etc. */ parent = GetParent(mf_hwnd); CommDlg_OpenSave_GetSpec(parent, sel_name, MAX_PATH); - preview_set_filename(mf_hwnd, sel_name); + preview_set_filename(mf_hwnd, utf_16to8(sel_name)); break; default: break; @@ -1398,11 +1409,11 @@ static UINT CALLBACK export_raw_file_hook_proc(HWND ef_hwnd, UINT msg, WPARAM w_param, LPARAM l_param) { HWND cur_ctrl; OPENFILENAME *ofnp = (OPENFILENAME *) l_param; - gchar raw_msg[100]; + TCHAR raw_msg[100]; switch(msg) { case WM_INITDIALOG: - g_snprintf(raw_msg, sizeof(raw_msg), "%d byte%s of raw binary data will be written", + _snwprintf(raw_msg, sizeof(raw_msg), _T("%d byte%s of raw binary data will be written"), ofnp->lCustData, plurality(ofnp->lCustData, "", "s")); cur_ctrl = GetDlgItem(ef_hwnd, EWFD_EXPORTRAW_ST); SetWindowText(cur_ctrl, raw_msg); |