@@ -130,7 +130,7 @@ int ConfigForeach(const git_config_entry *e, void *payload)
130130 */
131131
132132 wchar_t buf[1024 ];
133- MultiByteToWideChar (CP_UTF8, 0 , e->name , - 1 , buf, 1024 );
133+ LGitUtf8ToWide ( e->name , buf, 1024 );
134134 /*
135135 * We should check if the item is already existant. If so, replace if the
136136 * level is higher. Otherwise, it can be confusing because operations will
@@ -174,7 +174,7 @@ int ConfigForeach(const git_config_entry *e, void *payload)
174174 }
175175 }
176176 /* now for the subitems... */
177- MultiByteToWideChar (CP_UTF8, 0 , e->value , - 1 , buf, 1024 );
177+ LGitUtf8ToWide ( e->value , buf, 1024 );
178178 lvi.mask = LVIF_TEXT;
179179 lvi.iSubItem = 1 ;
180180 lvi.pszText = (wchar_t *)buf;
@@ -214,7 +214,7 @@ static void FillConfigView(HWND hwnd, LGitConfigDialogParams *params)
214214 }
215215}
216216
217- static BOOL GetSelectedConfig (HWND hwnd, char *buf, size_t bufsz)
217+ static BOOL GetSelectedConfig (HWND hwnd, wchar_t *buf, size_t bufsz)
218218{
219219 HWND lv = GetDlgItem (hwnd, IDC_CONFIG_LIST);
220220 if (lv == NULL ) {
@@ -224,21 +224,26 @@ static BOOL GetSelectedConfig(HWND hwnd, char *buf, size_t bufsz)
224224 if (selected == -1 ) {
225225 return FALSE ;
226226 }
227- ListView_GetItemText (lv, selected, 0 , buf, bufsz);
228- return TRUE ;
227+ LVITEMW lvi;
228+ ZeroMemory (&lvi, sizeof (lvi));
229+ lvi.mask = LVIF_TEXT;
230+ lvi.iItem = selected; /* in case */
231+ lvi.pszText = buf;
232+ lvi.cchTextMax = bufsz;
233+ return SendMessage (lv, LVM_GETITEMTEXTW, selected, (LPARAM)&lvi) > 0 ;
229234}
230235
231236/* *
232237 * Name and value are used to pre-fill the dialog; they aren't written to.
233238 */
234- static void ConfigEditDialog (HWND hwnd, LGitConfigDialogParams *params, const char *name, const char *value, BOOL isNew)
239+ static void ConfigEditDialog (HWND hwnd, LGitConfigDialogParams *params, const wchar_t *name, const wchar_t *value, BOOL isNew)
235240{
236241 LGitEditConfigDialogParams ec_params;
237242 ZeroMemory (&ec_params, sizeof (LGitEditConfigDialogParams));
238243 ec_params.ctx = params->ctx ;
239244 ec_params.is_new = isNew;
240- MultiByteToWideChar (CP_UTF8, 0 , name == NULL ? " " : name, - 1 , ec_params.new_name , 128 );
241- MultiByteToWideChar (CP_UTF8, 0 , value == NULL ? " " : value, - 1 , ec_params.new_value , 128 );
245+ wcslcpy ( ec_params.new_name , name , 128 );
246+ wcslcpy ( ec_params.new_value , value , 128 );
242247 switch (DialogBoxParam (params->ctx ->dllInst ,
243248 MAKEINTRESOURCE (IDD_CONFIG_EDIT),
244249 hwnd,
@@ -257,8 +262,8 @@ static void ConfigEditDialog(HWND hwnd, LGitConfigDialogParams *params, const ch
257262 /* convert */
258263 char new_name[256 ];
259264 char new_value[256 ];
260- WideCharToMultiByte (CP_UTF8, 0 , ec_params.new_name , - 1 , new_name, 256 , NULL , NULL );
261- WideCharToMultiByte (CP_UTF8, 0 , ec_params.new_value , - 1 , new_value, 256 , NULL , NULL );
265+ LGitWideToUtf8 ( ec_params.new_name , new_name, 256 );
266+ LGitWideToUtf8 ( ec_params.new_value , new_value, 256 );
262267 if (git_config_set_string (params->config , new_name, new_value) != 0 ) {
263268 LGitLibraryError (hwnd, " git_config_set_string" );
264269 return ;
@@ -269,42 +274,47 @@ static void ConfigEditDialog(HWND hwnd, LGitConfigDialogParams *params, const ch
269274
270275static void ConfigEdit (HWND hwnd, LGitConfigDialogParams *params)
271276{
272- char name[128 ];
277+ wchar_t name[128 ];
278+ char name_utf8[128 ];
273279 if (!GetSelectedConfig (hwnd, name, 128 )) {
274280 LGitLog (" ! No config?\n " );
275281 return ;
276282 }
283+ LGitWideToUtf8 (name, name_utf8, 128 );
277284 /*
278285 * XXX: Check if we're editing in the same level. If not, a new value is
279286 * inserted at the higher level which supersedes the lower one.
280287 */
281288 git_buf old_val_buf = {0 };
282- if (git_config_get_string_buf (&old_val_buf, params->config , name) != 0 ) {
289+ wchar_t old_val_utf16[128 ];
290+ if (git_config_get_string_buf (&old_val_buf, params->config , name_utf8) != 0 ) {
283291 LGitLibraryError (hwnd, " git_config_get_string_buf" );
284292 return ;
285293 }
286- LGitLog (" ! Editing %s?\n " , name);
287- ConfigEditDialog (hwnd, params, name, old_val_buf.ptr , FALSE );
294+ LGitUtf8ToWide (old_val_buf.ptr , old_val_utf16, 128 );
295+ LGitLog (" ! Editing %s?\n " , name_utf8);
296+ ConfigEditDialog (hwnd, params, name, old_val_utf16, FALSE );
288297 git_buf_dispose (&old_val_buf);
289298}
290299
291300static void ConfigRemove (HWND hwnd, LGitConfigDialogParams *params)
292301{
293302 /* XXX: Multiple selection could be handy here */
294- char name[128 ];
303+ wchar_t name[128 ];
304+ char name_utf8[128 ];
295305 if (!GetSelectedConfig (hwnd, name, 128 )) {
296306 LGitLog (" ! No config?\n " );
297307 return ;
298308 }
299- LGitLog ( " ! Removing %s? \n " , name );
309+ LGitWideToUtf8 (name, name_utf8, 128 );
300310 if (MessageBox (hwnd,
301311 " This configuration entry will be deleted from its source. "
302312 " It may be replaced with an inherited configuration. Are you sure?" ,
303313 " Remove Config Entry?" ,
304314 MB_ICONWARNING | MB_YESNO) != IDYES) {
305315 return ;
306316 }
307- if (git_config_delete_entry (params->config , name ) != 0 ) {
317+ if (git_config_delete_entry (params->config , name_utf8 ) != 0 ) {
308318 LGitLibraryError (hwnd, " git_config_delete_entry" );
309319 return ;
310320 }
0 commit comments