diff options
Diffstat (limited to 'src/common/cfgfiles.c')
-rw-r--r-- | src/common/cfgfiles.c | 96 |
1 files changed, 46 insertions, 50 deletions
diff --git a/src/common/cfgfiles.c b/src/common/cfgfiles.c index a8bd32f9..a49e17ae 100644 --- a/src/common/cfgfiles.c +++ b/src/common/cfgfiles.c @@ -39,7 +39,7 @@ #endif #define DEF_FONT "Monospace 9" -#define DEF_FONT_ALTER "Arial Unicode MS,Lucida Sans Unicode,MS Gothic,Unifont" +#define DEF_FONT_ALTER "Arial Unicode MS,Segoe UI Emoji,Lucida Sans Unicode,Meiryo,Symbola,Unifont" const char * const languages[LANGUAGES_LENGTH] = { "af", "sq", "am", "ast", "az", "eu", "be", "bg", "ca", "zh_CN", /* 0 .. 9 */ @@ -57,15 +57,11 @@ list_addentry (GSList ** list, char *cmd, char *name) size_t name_len; size_t cmd_len = 1; - /* remove <2.8.0 stuff */ - if (!strcmp (cmd, "away") && !strcmp (name, "BACK")) - return; - if (cmd) cmd_len = strlen (cmd) + 1; name_len = strlen (name) + 1; - pop = malloc (sizeof (struct popup) + cmd_len + name_len); + pop = g_malloc (sizeof (struct popup) + cmd_len + name_len); pop->name = (char *) pop + sizeof (struct popup); pop->cmd = pop->name + name_len; @@ -137,13 +133,13 @@ list_loadconf (char *file, GSList ** list, char *defaultconf) abort (); } - ibuf = malloc (st.st_size); + ibuf = g_malloc (st.st_size); read (fd, ibuf, st.st_size); close (fd); list_load_from_data (list, ibuf, st.st_size); - free (ibuf); + g_free (ibuf); } void @@ -153,7 +149,7 @@ list_free (GSList ** list) while (*list) { data = (void *) (*list)->data; - free (data); + g_free (data); *list = g_slist_remove (*list, data); } } @@ -170,7 +166,7 @@ list_delentry (GSList ** list, char *name) if (!g_ascii_strcasecmp (name, pop->name)) { *list = g_slist_remove (*list, pop); - free (pop); + g_free (pop); return 1; } alist = alist->next; @@ -211,10 +207,10 @@ cfg_get_str (char *cfg, const char *var, char *dest, int dest_len) while (*cfg != 0 && *cfg != '\n') cfg++; if (*cfg == 0) - return 0; + return NULL; cfg++; if (*cfg == 0) - return 0; + return NULL; } } @@ -224,18 +220,18 @@ cfg_put_str (int fh, char *var, char *value) char buf[512]; int len; - snprintf (buf, sizeof buf, "%s = %s\n", var, value); + g_snprintf (buf, sizeof buf, "%s = %s\n", var, value); len = strlen (buf); return (write (fh, buf, len) == len); } int -cfg_put_color (int fh, int r, int g, int b, char *var) +cfg_put_color (int fh, guint16 r, guint16 g, guint16 b, char *var) { char buf[400]; int len; - snprintf (buf, sizeof buf, "%s = %04x %04x %04x\n", var, r, g, b); + g_snprintf (buf, sizeof buf, "%s = %04hx %04hx %04hx\n", var, r, g, b); len = strlen (buf); return (write (fh, buf, len) == len); } @@ -249,20 +245,20 @@ cfg_put_int (int fh, int value, char *var) if (value == -1) value = 1; - snprintf (buf, sizeof buf, "%s = %d\n", var, value); + g_snprintf (buf, sizeof buf, "%s = %d\n", var, value); len = strlen (buf); return (write (fh, buf, len) == len); } int -cfg_get_color (char *cfg, char *var, int *r, int *g, int *b) +cfg_get_color (char *cfg, char *var, guint16 *r, guint16 *g, guint16 *b) { char str[128]; if (!cfg_get_str (cfg, var, str, sizeof (str))) return 0; - sscanf (str, "%04x %04x %04x", r, g, b); + sscanf (str, "%04hx %04hx %04hx", r, g, b); return 1; } @@ -312,9 +308,7 @@ get_xdir (void) if (portable_mode () || SHGetKnownFolderPath (&FOLDERID_RoamingAppData, 0, NULL, &roaming_path_wide) != S_OK) { - char *path; - - path = g_win32_get_package_installation_directory_of_module (NULL); + char *path = g_win32_get_package_installation_directory_of_module (NULL); if (path) { xdir = g_build_filename (path, "config", NULL); @@ -440,6 +434,7 @@ const struct prefs vars[] = {"gui_tab_dots", P_OFFINT (hex_gui_tab_dots), TYPE_BOOL}, {"gui_tab_icons", P_OFFINT (hex_gui_tab_icons), TYPE_BOOL}, {"gui_tab_layout", P_OFFINT (hex_gui_tab_layout), TYPE_INT}, + {"gui_tab_middleclose", P_OFFINT (hex_gui_tab_middleclose), TYPE_BOOL}, {"gui_tab_newtofront", P_OFFINT (hex_gui_tab_newtofront), TYPE_INT}, {"gui_tab_pos", P_OFFINT (hex_gui_tab_pos), TYPE_INT}, {"gui_tab_scrollchans", P_OFFINT (hex_gui_tab_scrollchans), TYPE_BOOL}, @@ -482,11 +477,11 @@ const struct prefs vars[] = {"gui_win_width", P_OFFINT (hex_gui_win_width), TYPE_INT}, {"identd", P_OFFINT (hex_identd), TYPE_BOOL}, + {"identd_port", P_OFFINT (hex_identd_port), TYPE_INT}, {"input_balloon_chans", P_OFFINT (hex_input_balloon_chans), TYPE_BOOL}, {"input_balloon_hilight", P_OFFINT (hex_input_balloon_hilight), TYPE_BOOL}, {"input_balloon_priv", P_OFFINT (hex_input_balloon_priv), TYPE_BOOL}, - {"input_balloon_time", P_OFFINT (hex_input_balloon_time), TYPE_INT}, {"input_beep_chans", P_OFFINT (hex_input_beep_chans), TYPE_BOOL}, {"input_beep_hilight", P_OFFINT (hex_input_beep_hilight), TYPE_BOOL}, {"input_beep_priv", P_OFFINT (hex_input_beep_priv), TYPE_BOOL}, @@ -590,10 +585,10 @@ const struct prefs vars[] = {0, 0, 0}, }; -static char * +static const char * convert_with_fallback (const char *str, const char *fallback) { - char *utf; + const char *utf; #ifndef WIN32 /* On non-Windows, g_get_user_name and g_get_real_name return a string in system locale, so convert it to utf-8. */ @@ -652,7 +647,7 @@ get_default_language (void) if (lang_no >= 0) { - free (lang); + g_free (lang); return lang_no; } @@ -661,7 +656,7 @@ get_default_language (void) lang_no = find_language_number (lang); - free (lang); + g_free (lang); return lang_no >= 0 ? lang_no : find_language_number ("en"); } @@ -703,8 +698,8 @@ get_default_spell_languages (void) } } } - if (last != NULL) - g_free(last); + + g_free (last); if (lang_list[0]) return g_strdup (ret); @@ -765,6 +760,7 @@ load_default_config(void) prefs.hex_gui_tab_chans = 1; prefs.hex_gui_tab_dialogs = 1; prefs.hex_gui_tab_icons = 1; + prefs.hex_gui_tab_middleclose = 1; prefs.hex_gui_tab_server = 1; prefs.hex_gui_tab_sort = 1; prefs.hex_gui_topicbar = 1; @@ -776,7 +772,6 @@ load_default_config(void) prefs.hex_gui_ulist_resizable = 1; prefs.hex_gui_ulist_style = 1; prefs.hex_gui_win_save = 1; - prefs.hex_identd = 1; prefs.hex_input_flash_hilight = 1; prefs.hex_input_flash_priv = 1; prefs.hex_input_tray_hilight = 1; @@ -832,7 +827,6 @@ load_default_config(void) prefs.hex_gui_ulist_pos = 3; prefs.hex_gui_win_height = 400; prefs.hex_gui_win_width = 640; - prefs.hex_input_balloon_time = 20; prefs.hex_irc_ban_type = 1; prefs.hex_irc_join_delay = 5; prefs.hex_net_reconnect_delay = 10; @@ -847,7 +841,7 @@ load_default_config(void) #ifdef WIN32 if (portable_mode () || SHGetKnownFolderPath (&FOLDERID_Downloads, 0, NULL, &roaming_path_wide) != S_OK) { - snprintf (prefs.hex_dcc_dir, sizeof (prefs.hex_dcc_dir), "%s\\downloads", get_xdir ()); + g_snprintf (prefs.hex_dcc_dir, sizeof (prefs.hex_dcc_dir), "%s\\downloads", get_xdir ()); } else { @@ -861,34 +855,36 @@ load_default_config(void) #else if (g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD)) { - strcpy (prefs.hex_dcc_dir, g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD)); + safe_strcpy (prefs.hex_dcc_dir, g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD), sizeof(prefs.hex_dcc_dir)); } else { - strcpy (prefs.hex_dcc_dir, g_build_filename (g_get_home_dir (), "Downloads", NULL)); + char *download_dir = g_build_filename (g_get_home_dir (), "Downloads", NULL); + safe_strcpy (prefs.hex_dcc_dir, download_dir, sizeof(prefs.hex_dcc_dir)); + g_free (download_dir); } #endif strcpy (prefs.hex_gui_ulist_doubleclick, "QUERY %s"); strcpy (prefs.hex_input_command_char, "/"); - strcpy (prefs.hex_irc_logmask, g_build_filename ("%n", "%c.log", NULL)); - strcpy (prefs.hex_irc_nick1, username); - strcpy (prefs.hex_irc_nick2, username); - strcat (prefs.hex_irc_nick2, "_"); - strcpy (prefs.hex_irc_nick3, username); - strcat (prefs.hex_irc_nick3, "__"); + strcpy (prefs.hex_irc_logmask, "%n"G_DIR_SEPARATOR_S"%c.log"); + safe_strcpy (prefs.hex_irc_nick1, username, sizeof(prefs.hex_irc_nick1)); + safe_strcpy (prefs.hex_irc_nick2, username, sizeof(prefs.hex_irc_nick2)); + g_strlcat (prefs.hex_irc_nick2, "_", sizeof(prefs.hex_irc_nick2)); + safe_strcpy (prefs.hex_irc_nick3, username, sizeof(prefs.hex_irc_nick3)); + g_strlcat (prefs.hex_irc_nick3, "__", sizeof(prefs.hex_irc_nick3)); strcpy (prefs.hex_irc_no_hilight, "NickServ,ChanServ,InfoServ,N,Q"); - strcpy (prefs.hex_irc_part_reason, _("Leaving")); - strcpy (prefs.hex_irc_quit_reason, prefs.hex_irc_part_reason); - strcpy (prefs.hex_irc_real_name, realname); - strcpy (prefs.hex_irc_user_name, username); + safe_strcpy (prefs.hex_irc_part_reason, _("Leaving"), sizeof(prefs.hex_irc_part_reason)); + safe_strcpy (prefs.hex_irc_quit_reason, prefs.hex_irc_part_reason, sizeof(prefs.hex_irc_quit_reason)); + safe_strcpy (prefs.hex_irc_real_name, realname, sizeof(prefs.hex_irc_real_name)); + safe_strcpy (prefs.hex_irc_user_name, username, sizeof(prefs.hex_irc_user_name)); strcpy (prefs.hex_stamp_log_format, "%b %d %H:%M:%S "); strcpy (prefs.hex_stamp_text_format, "[%H:%M:%S] "); font = fe_get_default_font (); if (font) { - strcpy (prefs.hex_text_font, font); - strcpy (prefs.hex_text_font_main, font); + safe_strcpy (prefs.hex_text_font, font, sizeof(prefs.hex_text_font)); + safe_strcpy (prefs.hex_text_font_main, font, sizeof(prefs.hex_text_font_main)); } else { @@ -898,7 +894,7 @@ load_default_config(void) strcpy (prefs.hex_text_font_alternative, DEF_FONT_ALTER); langs = get_default_spell_languages (); - strcpy (prefs.hex_text_spell_langs, langs); + safe_strcpy (prefs.hex_text_spell_langs, langs, sizeof(prefs.hex_text_spell_langs)); /* private variables */ @@ -1228,7 +1224,7 @@ cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (erase || *val) { /* save the previous value until we print it out */ - prev_string = (char*) malloc (vars[i].len + 1); + prev_string = g_malloc (vars[i].len + 1); strncpy (prev_string, (char *) &prefs + vars[i].offset, vars[i].len); /* update the variable */ @@ -1240,7 +1236,7 @@ cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) PrintTextf (sess, "%s set to: %s (was: %s)\n", var, (char *) &prefs + vars[i].offset, prev_string); } - free (prev_string); + g_free (prev_string); } else { @@ -1315,7 +1311,7 @@ cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) } int -hexchat_open_file (char *file, int flags, int mode, int xof_flags) +hexchat_open_file (const char *file, int flags, int mode, int xof_flags) { char *buf; int fd; @@ -1351,7 +1347,7 @@ hexchat_fopen_file (const char *file, const char *mode, int xof_flags) FILE *fh; if (xof_flags & XOF_FULLPATH) - return fopen (file, mode); + return g_fopen (file, mode); buf = g_build_filename (get_xdir (), file, NULL); fh = g_fopen (buf, mode); |