diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-12 02:06:49 +0200 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-12 02:06:49 +0200 |
commit | 24b8bbb2616d685006a279e46a4bd2e8e7cf6694 (patch) | |
tree | c585d428a08bdd8c7f22b1fdef8e65d758f60d6e /lib | |
parent | e21c0f8b276cc3ca177bcf6217eba9c634d410f7 (diff) |
Start handling CTCPs, in a saner way than before.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/misc.c | 45 | ||||
-rw-r--r-- | lib/misc.h | 2 |
2 files changed, 47 insertions, 0 deletions
@@ -613,3 +613,48 @@ int md5_verify_password( char *password, char *hash ) return ret; } + +char **split_command_parts( char *command ) +{ + static char *cmd[IRC_MAX_ARGS+1]; + char *s, q = 0; + int k; + + memset( cmd, 0, sizeof( cmd ) ); + cmd[0] = command; + k = 1; + for( s = command; *s && k < IRC_MAX_ARGS; s ++ ) + if( *s == ' ' && !q ) + { + *s = 0; + while( *++s == ' ' ); + if( *s == '"' || *s == '\'' ) + { + q = *s; + s ++; + } + if( *s ) + { + cmd[k++] = s; + s --; + } + else + { + break; + } + } + else if( *s == '\\' && ( ( !q && s[1] ) || ( q && q == s[1] ) ) ) + { + char *cpy; + + for( cpy = s; *cpy; cpy ++ ) + cpy[0] = cpy[1]; + } + else if( *s == q ) + { + q = *s = 0; + } + cmd[k] = NULL; + + return cmd; +} @@ -67,4 +67,6 @@ G_MODULE_EXPORT gboolean ssl_sockerr_again( void *ssl ); G_MODULE_EXPORT int md5_verify_password( char *password, char *hash ); +G_MODULE_EXPORT char **split_command_parts( char *command ); + #endif |