| | 375 | | static void handle_exec(const char *args, GHashTable *optlist, |
| | 376 | | SERVER_REC *server, WI_ITEM_REC *item) |
| | 377 | | { |
| | 378 | | PROCESS_REC *rec; |
| | 379 | | SERVER_REC *target_server; |
| | 380 | | char *target, *level; |
| | 381 | | int notice, signum, interactive, target_nick, target_channel; |
| | 382 | | |
| | 383 | | |
| | 384 | | |
| | 385 | | |
| | 386 | | signum = cmd_options_get_signal("exec", optlist); |
| | 387 | | if (signum == -2) |
| | 388 | | return; |
| | 389 | | |
| | 390 | | if (*args == '\0') { |
| | 391 | | exec_show_list(); |
| | 392 | | return; |
| | 393 | | } |
| | 394 | | |
| | 395 | | target = NULL;
|
| | 396 | | target_server = NULL;
|
| | 397 | | notice = FALSE;
|
| | 398 | | |
| | 399 | | if (g_hash_table_lookup(optlist, "in") != NULL) {
|
| | 400 | | rec = process_find(g_hash_table_lookup(optlist, "in"), TRUE);
|
| | 401 | | if (rec != NULL) {
|
| | 402 | | net_sendbuffer_send(rec->out, args, strlen(args)); |
| | 403 | | net_sendbuffer_send(rec->out, "\n", 1); |
| | 404 | | } |
| | 405 | | return; |
| | 406 | | } |
| | 407 | | |
| | 408 | | |
| | 409 | | |
| | 410 | | rec = process_find(args, *args == '%'); |
| | 411 | | if (*args == '%' && rec == NULL)
|
| | 412 | | return; |
| | 413 | | |
| | 414 | | |
| | 415 | | target_channel = target_nick = FALSE;
|
| | 416 | | if (g_hash_table_lookup(optlist, "out") != NULL) {
|
| | 417 | | |
| | 418 | | if (item == NULL)
|
| | 419 | | cmd_return_error(CMDERR_NOT_JOINED);
|
| | 420 | | target = (char *) window_item_get_target(item);
|
| | 421 | | target_server = item->server; |
| | 422 | | target_channel = IS_CHANNEL(item);
|
| | 423 | | target_nick = IS_QUERY(item);
|
| | 424 | | } else if (g_hash_table_lookup(optlist, "msg") != NULL) {
|
| | 425 | | |
| | 426 | | target = g_hash_table_lookup(optlist, "msg"); |
| | 427 | | target_server = server; |
| | 428 | | } else if (g_hash_table_lookup(optlist, "notice") != NULL) {
|
| | 429 | | target = g_hash_table_lookup(optlist, "notice"); |
| | 430 | | target_server = server; |
| | 431 | | notice = TRUE;
|
| | 432 | | } |
| | 433 | | |
| | 434 | | |
| true | 435 | | if (rec == NULL &&
|
| | 436 | | (signum != -1 || g_hash_table_lookup(optlist, "close") != NULL)) {
|
| | 437 | | printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
|
| | 438 | | "Unknown process name: %s", args); |
| | 439 | | return; |
| | 440 | | } |
| | 441 | | if (g_hash_table_lookup(optlist, "close") != NULL) {
|
| | 442 | | |