X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodcmd.c;h=7ae19af97739b126432fa2bf6415c2e7531526a6;hb=591505ef854aecb6b35c00fca9d58d54fe513eb8;hp=f1720f2e1b7ae76b16fca6d68be9542bae4cf3ca;hpb=61a43097895171f5f694ebbf3d70c73bb67f1550;p=srvx.git diff --git a/src/modcmd.c b/src/modcmd.c index f1720f2..7ae19af 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -1,5 +1,5 @@ /* modcmd.c - Generalized module command support - * Copyright 2002-2006 srvx Development Team + * Copyright 2002-2007 srvx Development Team * * This file is part of srvx. * @@ -18,7 +18,6 @@ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include "arch-version.h" #include "chanserv.h" #include "conf.h" #include "modcmd.h" @@ -74,8 +73,8 @@ static const struct message_entry msgtab[] = { { "MCMSG_HELPFILE_UNBOUND", "Since that was the last command from module %s on the service, the helpfile for %s was removed." }, { "MCMSG_NO_HELPFILE", "Module %s does not have a help file." }, { "MCMSG_HELPFILE_ERROR", "Syntax error reading %s; help contents not changed." }, - { "MCMSG_HELPFILE_READ", "Read %s help database in "FMT_TIME_T".%03lu seconds." }, - { "MCMSG_COMMAND_TIME", "Command $b%s$b finished in "FMT_TIME_T".%06lu seconds." }, + { "MCMSG_HELPFILE_READ", "Read %s help database in %lu.%03lu seconds." }, + { "MCMSG_COMMAND_TIME", "Command $b%s$b finished in %lu.%06lu seconds." }, { "MCMSG_NEED_OPSERV_LEVEL", "You must have $O access of at least $b%u$b." }, { "MCMSG_NEED_CHANSERV_LEVEL", "You must have $C access of at least $b%u$b in the channel." }, { "MCMSG_NEED_ACCOUNT_FLAGS", "You must have account flags $b%s$b." }, @@ -174,8 +173,8 @@ flags_qsort(const void *a, const void *b) { return irccasecmp(fa->name, fb->name); } -DEFINE_LIST(svccmd_list, struct svccmd*); -DEFINE_LIST(module_list, struct module*); +DEFINE_LIST(svccmd_list, struct svccmd*) +DEFINE_LIST(module_list, struct module*) static void free_service_command(void *data) { @@ -626,7 +625,7 @@ int svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNode *channel, unsigned int argc, char *argv[], unsigned int server_qualified) { extern struct userNode *chanserv; struct svccmd *cmd; - unsigned int cmd_arg, perms, flags, options; + unsigned int cmd_arg, perms, flags, options, result; char channel_name[CHANNELLEN+1]; /* First check pubcmd for the channel. */ @@ -737,11 +736,13 @@ svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNo safestrncpy(channel_name, channel->name, sizeof(channel_name)); else channel_name[0] = 0; - if (!cmd->command->func(user, channel, argc, argv, cmd)) + if (!(result = cmd->command->func(user, channel, argc, argv, cmd))) return 0; if (!(flags & MODCMD_NO_LOG)) { enum log_severity slvl; - if (perms & ACTION_STAFF) + if (result & CMD_LOG_OVERRIDE) + slvl = LOG_OVERRIDE; + else if ((perms & ACTION_STAFF) || (result & CMD_LOG_STAFF)) slvl = LOG_STAFF; else if (perms & ACTION_OVERRIDE) slvl = LOG_OVERRIDE; @@ -861,9 +862,9 @@ modcmd_privmsg(struct userNode *user, struct userNode *bot, const char *text, in irc_notice_user(bot,user, "\x01PING\x01"); } } else if (!irccasecmp(text, "TIME")) { - struct tm tm; - localtime_r(&now, &tm); - strftime(response, sizeof(response), "\x01TIME %a %b %d %H:%M:%S %Y\x01", &tm); + time_t feh; + feh = now; + strftime(response, sizeof(response), "\x01TIME %a %b %d %H:%M:%S %Y\x01", localtime(&feh)); irc_notice_user(bot, user, response); } else if (!irccasecmp(text, "USERINFO")) { snprintf(response, sizeof(response), "\x01USERINFO %s\x01", bot->info); @@ -875,7 +876,7 @@ modcmd_privmsg(struct userNode *user, struct userNode *bot, const char *text, in * users, except to add copyright information pertaining * to changes you make to srvx. */ - snprintf(response, sizeof(response), "\x01VERSION %s (%s) %s\x01", PACKAGE_STRING, CODENAME, ARCH_VERSION); + snprintf(response, sizeof(response), "\x01VERSION %s (%s) %s\x01", PACKAGE_STRING, CODENAME, git_version); irc_notice_user(bot, user, response); } return; @@ -887,10 +888,12 @@ modcmd_privmsg(struct userNode *user, struct userNode *bot, const char *text, in } void -modcmd_chanmsg(struct userNode *user, struct chanNode *chan, const char *text, struct userNode *bot) { +modcmd_chanmsg(struct userNode *user, struct chanNode *chan, const char *text, struct userNode *bot, unsigned int is_notice) { struct service *service; - if (!(service = dict_find(services, bot->nick, NULL))) return; + if (!(service = dict_find(services, bot->nick, NULL))) + return; svccmd_invoke(user, service, chan, text, 0); + (void)is_notice; } struct service * @@ -1211,10 +1214,10 @@ static MODCMD_FUNC(cmd_readhelp) { stop.tv_sec -= start.tv_sec; stop.tv_usec -= start.tv_usec; if (stop.tv_usec < 0) { - stop.tv_sec -= 1; - stop.tv_usec += 1000000; + stop.tv_sec -= 1; + stop.tv_usec += 1000000; } - reply("MCMSG_HELPFILE_READ", module->name, stop.tv_sec, stop.tv_usec/1000); + reply("MCMSG_HELPFILE_READ", module->name, (unsigned long)stop.tv_sec, (unsigned long)stop.tv_usec/1000); return 1; } @@ -1236,10 +1239,10 @@ static MODCMD_FUNC(cmd_timecmd) { stop.tv_sec -= start.tv_sec; stop.tv_usec -= start.tv_usec; if (stop.tv_usec < 0) { - stop.tv_sec -= 1; - stop.tv_usec += 1000000; + stop.tv_sec -= 1; + stop.tv_usec += 1000000; } - reply("MCMSG_COMMAND_TIME", cmd_text, stop.tv_sec, stop.tv_usec); + reply("MCMSG_COMMAND_TIME", cmd_text, (unsigned long)stop.tv_sec, (unsigned long)stop.tv_usec); return 1; } @@ -1831,17 +1834,14 @@ static MODCMD_FUNC(cmd_dump_messages) { reply("MSG_INTERNAL_FAILURE"); return 0; } - if ((res = setjmp(ctx->jbuf)) != 0) { - ctx->complex.used = 0; /* to avoid false assert()s in close */ - saxdb_close_context(ctx); - fclose(pf); + if ((res = setjmp(*saxdb_jmp_buf(ctx))) != 0) { + saxdb_close_context(ctx, 1); reply("MCMSG_MESSAGE_DUMP_FAILED", strerror(res)); return 0; } else { for (it = dict_first(lang_C->messages); it; it = iter_next(it)) saxdb_write_string(ctx, iter_key(it), iter_data(it)); - saxdb_close_context(ctx); - fclose(pf); + saxdb_close_context(ctx, 1); reply("MCMSG_MESSAGES_DUMPED", fname); return 1; } @@ -1853,9 +1853,9 @@ static MODCMD_FUNC(cmd_version) { * command or its accessibility to normal IRC users, except to add * copyright information pertaining to changes you make to srvx. */ - send_message_type(4, user, cmd->parent->bot, "$b"PACKAGE_STRING"$b ("CODENAME"), Built: "__DATE__", "__TIME__". Copyright 2000-2006 srvx Development Team."); - if ((argc > 1) && !irccasecmp(argv[1], "arch")) - send_message_type(4, user, cmd->parent->bot, "%s", ARCH_VERSION); + send_message_type(4, user, cmd->parent->bot, "$b"PACKAGE_STRING"$b ("CODENAME"), Built: "__DATE__", "__TIME__". Copyright 2000-2007 srvx Development Team."); + if (argc > 1) + send_message_type(4, user, cmd->parent->bot, "%s", git_version); else send_message_type(12, user, cmd->parent->bot, "The srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.\nThe srvx Development Team can be reached at http://sf.net/projects/srvx/ or in #srvx on irc.gamesurge.net."); return 1;