Mercurial > pidgin
comparison src/protocols/irc/parse.c @ 9442:1e6bba55447c
[gaim-migrate @ 10263]
If we have commands in core, might as well not waste memory with this stuff
committer: Tailor Script <tailor@pidgin.im>
| author | Ethan Blanton <elb@pidgin.im> |
|---|---|
| date | Fri, 02 Jul 2004 18:45:24 +0000 |
| parents | f5c08be60098 |
| children | d6f398e80b32 |
comparison
equal
deleted
inserted
replaced
| 9441:eaa9aa1fad61 | 9442:1e6bba55447c |
|---|---|
| 548 } | 548 } |
| 549 g_free(args); | 549 g_free(args); |
| 550 g_free(from); | 550 g_free(from); |
| 551 } | 551 } |
| 552 | 552 |
| 553 int irc_parse_cmd(struct irc_conn *irc, const char *target, const char *cmdstr) | |
| 554 { | |
| 555 const char *cur, *end, *fmt; | |
| 556 char *tmp, *cmd, **args; | |
| 557 struct _irc_user_cmd *cmdent; | |
| 558 guint i; | |
| 559 int ret; | |
| 560 | |
| 561 cur = cmdstr; | |
| 562 end = strchr(cmdstr, ' '); | |
| 563 if (!end) | |
| 564 end = cur + strlen(cur); | |
| 565 | |
| 566 tmp = g_strndup(cur, end - cur); | |
| 567 cmd = g_utf8_strdown(tmp, -1); | |
| 568 g_free(tmp); | |
| 569 | |
| 570 if ((cmdent = g_hash_table_lookup(irc->cmds, cmd)) == NULL) { | |
| 571 ret = irc_cmd_default(irc, cmd, target, &cmdstr); | |
| 572 g_free(cmd); | |
| 573 return ret; | |
| 574 } | |
| 575 | |
| 576 args = g_new0(char *, strlen(cmdent->format)); | |
| 577 for (cur = end, fmt = cmdent->format, i = 0; fmt[i] && *cur++; i++) { | |
| 578 switch (fmt[i]) { | |
| 579 case 'v': | |
| 580 if (!(end = strchr(cur, ' '))) end = cur + strlen(cur); | |
| 581 args[i] = g_strndup(cur, end - cur); | |
| 582 cur += end - cur; | |
| 583 break; | |
| 584 case 't': | |
| 585 case 'n': | |
| 586 case 'c': | |
| 587 if (!(end = strchr(cur, ' '))) end = cur + strlen(cur); | |
| 588 args[i] = g_strndup(cur, end - cur); | |
| 589 cur += end - cur; | |
| 590 break; | |
| 591 case ':': | |
| 592 case '*': | |
| 593 args[i] = g_strdup(cur); | |
| 594 cur = cur + strlen(cur); | |
| 595 break; | |
| 596 default: | |
| 597 gaim_debug(GAIM_DEBUG_ERROR, "irc", "invalid command format character '%c'\n", fmt[i]); | |
| 598 break; | |
| 599 } | |
| 600 } | |
| 601 ret = (cmdent->cb)(irc, cmd, target, (const char **)args); | |
| 602 for (i = 0; i < strlen(cmdent->format); i++) | |
| 603 g_free(args[i]); | |
| 604 g_free(args); | |
| 605 | |
| 606 g_free(cmd); | |
| 607 return ret; | |
| 608 } | |
| 609 | |
| 610 static void irc_parse_error_cb(struct irc_conn *irc, char *input) | 553 static void irc_parse_error_cb(struct irc_conn *irc, char *input) |
| 611 { | 554 { |
| 612 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Unrecognized string: %s\n", input); | 555 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Unrecognized string: %s\n", input); |
| 613 } | 556 } |
