comparison src/cmds.c @ 14035:8bda65b88e49

[gaim-migrate @ 16638] A bunch of small changes. Mostly remove "if not null" checks before calling g_free, g_list_free, g_slist_free and g_strdup. Also use g_list_foreach() to call g_free to free strings in an array. And some whitespace changes here and there. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sat, 05 Aug 2006 08:27:39 +0000
parents bdf8081b1bc1
children
comparison
equal deleted inserted replaced
14034:0839a7b71325 14035:8bda65b88e49
69 c->id = id; 69 c->id = id;
70 c->cmd = g_strdup(cmd); 70 c->cmd = g_strdup(cmd);
71 c->args = g_strdup(args); 71 c->args = g_strdup(args);
72 c->priority = p; 72 c->priority = p;
73 c->flags = f; 73 c->flags = f;
74 c->prpl_id = prpl_id ? g_strdup(prpl_id) : NULL; 74 c->prpl_id = g_strdup(prpl_id);
75 c->func = func; 75 c->func = func;
76 c->help = helpstr ? g_strdup(helpstr) : NULL; 76 c->help = g_strdup(helpstr);
77 c->data = data; 77 c->data = data;
78 78
79 cmds = g_list_insert_sorted(cmds, c, (GCompareFunc)cmds_compare_func); 79 cmds = g_list_insert_sorted(cmds, c, (GCompareFunc)cmds_compare_func);
80 80
81 return id; 81 return id;
83 83
84 static void gaim_cmd_free(GaimCmd *c) 84 static void gaim_cmd_free(GaimCmd *c)
85 { 85 {
86 g_free(c->cmd); 86 g_free(c->cmd);
87 g_free(c->args); 87 g_free(c->args);
88 if (c->prpl_id) 88 g_free(c->prpl_id);
89 g_free(c->prpl_id); 89 g_free(c->help);
90 if (c->help)
91 g_free(c->help);
92
93 g_free(c); 90 g_free(c);
94 } 91 }
95 92
96 void gaim_cmd_unregister(GaimCmdId id) 93 void gaim_cmd_unregister(GaimCmdId id)
97 { 94 {
107 return; 104 return;
108 } 105 }
109 } 106 }
110 } 107 }
111 108
109 /**
110 * This sets args to a NULL-terminated array of strings. It should
111 * be freed using g_strfreev().
112 */
112 static gboolean gaim_cmd_parse_args(GaimCmd *cmd, const gchar *s, const gchar *m, gchar ***args) 113 static gboolean gaim_cmd_parse_args(GaimCmd *cmd, const gchar *s, const gchar *m, gchar ***args)
113 { 114 {
114 int i; 115 int i;
115 const char *end, *cur; 116 const char *end, *cur;
116 117
140 cur = end; 141 cur = end;
141 } else { 142 } else {
142 (*args)[i] = gaim_markup_slice(m, g_utf8_pointer_to_offset(s, cur), g_utf8_pointer_to_offset(s, end)); 143 (*args)[i] = gaim_markup_slice(m, g_utf8_pointer_to_offset(s, cur), g_utf8_pointer_to_offset(s, end));
143 cur = end +1; 144 cur = end +1;
144 } 145 }
145 break; 146 break;
146 case 's': 147 case 's':
147 (*args)[i] = g_strdup(cur); 148 (*args)[i] = g_strdup(cur);
148 cur = cur + strlen(cur); 149 cur = cur + strlen(cur);
149 break; 150 break;
150 case 'S': 151 case 'S':
156 157
157 if (*cur) 158 if (*cur)
158 return (cmd->flags & GAIM_CMD_FLAG_ALLOW_WRONG_ARGS); 159 return (cmd->flags & GAIM_CMD_FLAG_ALLOW_WRONG_ARGS);
159 160
160 return TRUE; 161 return TRUE;
161 }
162
163 static void gaim_cmd_free_args(gchar **args)
164 {
165 int i;
166
167 for (i = 0; args[i]; i++)
168 g_free(args[i]);
169 g_free(args);
170 } 162 }
171 163
172 static void gaim_cmd_strip_current_char(gunichar c, char *s, guint len) 164 static void gaim_cmd_strip_current_char(gunichar c, char *s, guint len)
173 { 165 {
174 int bytes; 166 int bytes;
258 250
259 right_prpl = TRUE; 251 right_prpl = TRUE;
260 252
261 /* this checks the allow bad args flag for us */ 253 /* this checks the allow bad args flag for us */
262 if (!gaim_cmd_parse_args(c, rest, mrest, &args)) { 254 if (!gaim_cmd_parse_args(c, rest, mrest, &args)) {
263 gaim_cmd_free_args(args); 255 g_strfreev(args);
264 args = NULL; 256 args = NULL;
265 continue; 257 continue;
266 } 258 }
267 259
268 tried_cmd = TRUE; 260 tried_cmd = TRUE;
269 ret = c->func(conv, cmd, args, &err, c->data); 261 ret = c->func(conv, cmd, args, &err, c->data);
270 if (ret == GAIM_CMD_RET_CONTINUE) { 262 if (ret == GAIM_CMD_RET_CONTINUE) {
271 if (err) 263 g_free(err);
272 g_free(err);
273 err = NULL; 264 err = NULL;
274 gaim_cmd_free_args(args); 265 g_strfreev(args);
275 args = NULL; 266 args = NULL;
276 continue; 267 continue;
277 } else { 268 } else {
278 break; 269 break;
279 } 270 }
280 271
281 } 272 }
282 273
283 if (args) 274 g_strfreev(args);
284 gaim_cmd_free_args(args);
285 g_free(cmd); 275 g_free(cmd);
286 g_free(mrest); 276 g_free(mrest);
287 277
288 if (!found) 278 if (!found)
289 return GAIM_CMD_STATUS_NOT_FOUND; 279 return GAIM_CMD_STATUS_NOT_FOUND;