equal
deleted
inserted
replaced
117 scr_log_print (LPRINT_DEBUG, "cmd: Reading error: %s.", error -> message); |
117 scr_log_print (LPRINT_DEBUG, "cmd: Reading error: %s.", error -> message); |
118 g_clear_error (&error); |
118 g_clear_error (&error); |
119 } |
119 } |
120 |
120 |
121 if (chstat == G_IO_STATUS_ERROR || chstat == G_IO_STATUS_EOF) { |
121 if (chstat == G_IO_STATUS_ERROR || chstat == G_IO_STATUS_EOF) { |
122 cb->source = 0; |
122 |
123 return FALSE; // XXX |
123 return FALSE; // XXX |
124 } |
124 } |
125 |
125 |
126 if (endpos) { |
126 if (endpos) { |
127 GString *input = cb->input; |
127 GString *input = cb->input; |
193 |
193 |
194 } else { |
194 } else { |
195 |
195 |
196 scr_log_print (LPRINT_LOGNORM, "cmd: Character conversion error: %s", error->message); |
196 scr_log_print (LPRINT_LOGNORM, "cmd: Character conversion error: %s", error->message); |
197 g_error_free (error); |
197 g_error_free (error); |
198 cb->source = 0; |
198 |
199 return FALSE; |
199 return FALSE; |
200 } |
200 } |
201 } |
201 } |
202 |
202 |
203 } else if (condition & (G_IO_ERR|G_IO_NVAL|G_IO_HUP)) { |
203 } else if (condition & (G_IO_ERR|G_IO_NVAL|G_IO_HUP)) { |
204 cb->source = 0; |
204 |
205 return FALSE; // XXX |
205 return FALSE; // XXX |
206 } |
206 } |
207 |
207 |
208 return TRUE; |
208 return TRUE; |
209 } |
209 } |
212 { |
212 { |
213 cmd_cb_t *cb = (cmd_cb_t *) data; |
213 cmd_cb_t *cb = (cmd_cb_t *) data; |
214 |
214 |
215 cmd_channels = g_slist_remove (cmd_channels, data); |
215 cmd_channels = g_slist_remove (cmd_channels, data); |
216 |
216 |
217 if (cb->source) |
|
218 g_source_remove (cb->source); |
|
219 if (cb->channel) |
|
220 g_io_channel_unref (cb->channel); |
|
221 if (cb -> subject) |
217 if (cb -> subject) |
222 g_free (cb -> subject); |
218 g_free (cb -> subject); |
223 g_free (cb->jid); |
219 g_free (cb->jid); |
224 g_slice_free (cmd_cb_t, cb); |
220 g_slice_free (cmd_cb_t, cb); |
225 } |
221 } |
315 |
311 |
316 cb -> jid = g_strdup (jid); |
312 cb -> jid = g_strdup (jid); |
317 cb -> input = g_string_new (NULL); |
313 cb -> input = g_string_new (NULL); |
318 cb -> seq = 0; |
314 cb -> seq = 0; |
319 cb -> channel = channel; |
315 cb -> channel = channel; |
|
316 |
|
317 cmd_channels = g_slist_append (cmd_channels, cb); |
|
318 |
320 cb -> source = g_io_add_watch_full (channel, 0, G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL, |
319 cb -> source = g_io_add_watch_full (channel, 0, G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL, |
321 cmd_reader, (gpointer) cb, cmd_destroy_data); |
320 cmd_reader, (gpointer) cb, cmd_destroy_data); |
322 |
321 |
323 cmd_channels = g_slist_append (cmd_channels, cb); |
322 g_io_channel_unref ( channel ); |
|
323 |
324 } |
324 } |
325 } |
325 } |
326 } |
326 } |
327 |
327 |
328 void mcmd_init (void) |
328 void mcmd_init (void) |
343 #else |
343 #else |
344 if (mcmd_cmid) |
344 if (mcmd_cmid) |
345 cmd_del (mcmd_cmid); |
345 cmd_del (mcmd_cmid); |
346 #endif |
346 #endif |
347 |
347 |
348 for (sel = cmd_channels; sel; sel = sel->next) { |
348 for (sel = cmd_channels; sel; ) { |
349 cmd_cb_t *cb = (cmd_cb_t *) sel->data; |
349 cmd_cb_t *cb = (cmd_cb_t *) sel->data; |
|
350 sel = sel -> next; |
350 if (cb->source) |
351 if (cb->source) |
351 g_source_remove (cb->source); |
352 g_source_remove (cb->source); |
352 if (cb->channel) |
353 } |
353 g_io_channel_unref (cb->channel); |
|
354 g_free (cb->jid); |
|
355 g_slice_free (cmd_cb_t, cb); |
|
356 } |
|
357 |
|
358 g_slist_free (cmd_channels); |
|
359 } |
354 } |
360 |
355 |
361 /* vim: se ts=4 sw=4: */ |
356 /* vim: se ts=4 sw=4: */ |