diff options
author | TingPing <tingping@tingping.se> | 2014-12-28 06:37:25 -0500 |
---|---|---|
committer | TingPing <tingping@tingping.se> | 2014-12-28 06:44:44 -0500 |
commit | 83032b1aa3c3e5910c5cfd3e0ea1d25827f56475 (patch) | |
tree | 9be32a04d3070eac82177e11d182dad40a63baa7 /src/common/modes.c | |
parent | c4cb1b25ec06a5b0cb718c6f8e74630df9a9bc64 (diff) |
Use glib for all allocations
- Removes need to check for malloc failure - Removes need for NULL checks on free - Adds checks for integer overflows - Removes some extra memset calls - Removes chance of mixing libc and glib malloc/free
Diffstat (limited to 'src/common/modes.c')
-rw-r--r-- | src/common/modes.c | 59 |
1 files changed, 27 insertions, 32 deletions
diff --git a/src/common/modes.c b/src/common/modes.c index 23f75b1d..c65bf279 100644 --- a/src/common/modes.c +++ b/src/common/modes.c @@ -331,7 +331,7 @@ record_chan_mode (session *sess, char sign, char mode, char *arg) current = g_string_erase(current, argument_offset+1, argument_length-1); current = g_string_insert(current, argument_offset+1, arg); - free(sess->current_modes); + g_free(sess->current_modes); sess->current_modes = g_string_free(current, FALSE); } } @@ -348,7 +348,7 @@ record_chan_mode (session *sess, char sign, char mode, char *arg) current = g_string_append(current, arg); } - free(sess->current_modes); + g_free(sess->current_modes); sess->current_modes = g_string_free(current, FALSE); } } @@ -361,7 +361,7 @@ record_chan_mode (session *sess, char sign, char mode, char *arg) /* remove the mode character */ current = g_string_erase(current, mode_pos, 1); - free(sess->current_modes); + g_free(sess->current_modes); sess->current_modes = g_string_free(current, FALSE); } } @@ -374,12 +374,13 @@ mode_cat (char *str, char *addition) if (str) { len = strlen (str) + strlen (addition) + 2; - str = realloc (str, len); + str = g_realloc (str, len); strcat (str, " "); strcat (str, addition); - } else + } + else { - str = strdup (addition); + str = g_strdup (addition); } return str; @@ -560,12 +561,12 @@ handle_single_mode (mode_run *mr, char sign, char mode, char *nick, { if (*arg) { - char *buf = malloc (strlen (chan) + strlen (arg) + 2); - sprintf (buf, "%s %s", chan, arg); + char *buf = g_strdup_printf ("%s %s", chan, arg); EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANMODEGEN, sess, nick, outbuf, outbuf + 2, buf, 0, tags_data->timestamp); - free (buf); - } else + g_free (buf); + } + else EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANMODEGEN, sess, nick, outbuf, outbuf + 2, chan, 0, tags_data->timestamp); } @@ -635,7 +636,7 @@ mode_print_grouped (session *sess, char *nick, mode_run *mr, { EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANOP, sess, nick, mr->op, NULL, NULL, 0, tags_data->timestamp); - free (mr->op); + g_free(mr->op); mr->op = NULL; } @@ -643,7 +644,7 @@ mode_print_grouped (session *sess, char *nick, mode_run *mr, { EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANDEOP, sess, nick, mr->deop, NULL, NULL, 0, tags_data->timestamp); - free (mr->deop); + g_free(mr->deop); mr->deop = NULL; } @@ -651,7 +652,7 @@ mode_print_grouped (session *sess, char *nick, mode_run *mr, { EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANVOICE, sess, nick, mr->voice, NULL, NULL, 0, tags_data->timestamp); - free (mr->voice); + g_free(mr->voice); mr->voice = NULL; } @@ -659,7 +660,7 @@ mode_print_grouped (session *sess, char *nick, mode_run *mr, { EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANDEVOICE, sess, nick, mr->devoice, NULL, NULL, 0, tags_data->timestamp); - free (mr->devoice); + g_free(mr->devoice); mr->devoice = NULL; } } @@ -717,9 +718,8 @@ handle_mode (server * serv, char *word[], char *word_eol[], if (numeric_324 && !using_front_tab) { - if (sess->current_modes) - free (sess->current_modes); - sess->current_modes = strdup (word_eol[offset+1]); + g_free (sess->current_modes); + sess->current_modes = g_strdup (word_eol[offset+1]); } sign = *modes; @@ -799,30 +799,29 @@ inbound_005 (server * serv, char *word[], const message_tags_data *tags_data) serv->modes_per_line = atoi (word[w] + 6); } else if (strncmp (word[w], "CHANTYPES=", 10) == 0) { - free (serv->chantypes); - serv->chantypes = strdup (word[w] + 10); + g_free (serv->chantypes); + serv->chantypes = g_strdup (word[w] + 10); } else if (strncmp (word[w], "CHANMODES=", 10) == 0) { - free (serv->chanmodes); - serv->chanmodes = strdup (word[w] + 10); + g_free (serv->chanmodes); + serv->chanmodes = g_strdup (word[w] + 10); } else if (strncmp (word[w], "PREFIX=", 7) == 0) { pre = strchr (word[w] + 7, ')'); if (pre) { pre[0] = 0; /* NULL out the ')' */ - free (serv->nick_prefixes); - free (serv->nick_modes); - serv->nick_prefixes = strdup (pre + 1); - serv->nick_modes = strdup (word[w] + 8); + g_free (serv->nick_prefixes); + g_free (serv->nick_modes); + serv->nick_prefixes = g_strdup (pre + 1); + serv->nick_modes = g_strdup (word[w] + 8); } else { /* bad! some ircds don't give us the modes. */ /* in this case, we use it only to strip /NAMES */ serv->bad_prefix = TRUE; - if (serv->bad_nick_prefixes) - free (serv->bad_nick_prefixes); - serv->bad_nick_prefixes = strdup (word[w] + 7); + g_free (serv->bad_nick_prefixes); + serv->bad_nick_prefixes = g_strdup (word[w] + 7); } } else if (strncmp (word[w], "WATCH=", 6) == 0) { @@ -832,10 +831,6 @@ inbound_005 (server * serv, char *word[], const message_tags_data *tags_data) serv->supports_monitor = TRUE; } else if (strncmp (word[w], "NETWORK=", 8) == 0) { -/* if (serv->networkname) - free (serv->networkname); - serv->networkname = strdup (word[w] + 8);*/ - if (serv->server_session->type == SESS_SERVER) { safe_strcpy (serv->server_session->channel, word[w] + 8, CHANLEN); |