Changeset 24b8bbb
- Timestamp:
- 2010-04-12T00:06:49Z (15 years ago)
- Branches:
- master
- Children:
- 89c11e7
- Parents:
- e21c0f8
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
irc.h
re21c0f8 r24b8bbb 120 120 { 121 121 gboolean (*privmsg)( irc_user_t *iu, const char *msg ); 122 gboolean (*ctcp)( irc_user_t *iu, char * const* ctcp ); 122 123 }; 123 124 -
irc_commands.c
re21c0f8 r24b8bbb 255 255 { 256 256 irc_send_num( irc, 412, ":No text to send" ); 257 } 258 else if( irc_channel_name_ok( cmd[1] ) && 259 ( ic = irc_channel_by_name( irc, cmd[1] ) ) ) 257 return; 258 } 259 260 /* Don't treat CTCP actions as real CTCPs, just convert them right now. */ 261 if( g_strncasecmp( cmd[2], "\001ACTION", 7 ) == 0 ) 262 { 263 cmd[2] += 4; 264 strcpy( cmd[2], "/me" ); 265 if( cmd[2][strlen(cmd[2])-1] == '\001' ) 266 cmd[2][strlen(cmd[2])-1] = '\0'; 267 } 268 269 if( irc_channel_name_ok( cmd[1] ) && 270 ( ic = irc_channel_by_name( irc, cmd[1] ) ) ) 260 271 { 261 272 if( ic->f->privmsg ) … … 264 275 else if( ( iu = irc_user_by_name( irc, cmd[1] ) ) ) 265 276 { 266 if( iu->f->privmsg ) 277 if( cmd[2][0] == '\001' ) 278 { 279 char **ctcp; 280 281 if( iu->f->ctcp == NULL ) 282 return; 283 if( cmd[2][strlen(cmd[2])-1] == '\001' ) 284 cmd[2][strlen(cmd[2])-1] = '\0'; 285 286 ctcp = split_command_parts( cmd[2] + 1 ); 287 iu->f->ctcp( iu, ctcp ); 288 } 289 else if( iu->f->privmsg ) 267 290 iu->f->privmsg( iu, cmd[2] ); 268 291 } -
irc_user.c
re21c0f8 r24b8bbb 147 147 } 148 148 149 static gboolean root_ctcp( irc_user_t *iu, char * const *ctcp ) 150 { 151 if( g_strcasecmp( ctcp[0], "VERSION" ) == 0 ) 152 { 153 } 154 155 return TRUE; 156 } 157 149 158 const struct irc_user_funcs irc_user_root_funcs = { 150 159 root_privmsg, 160 root_ctcp, 151 161 }; 152 162 -
lib/misc.c
re21c0f8 r24b8bbb 614 614 return ret; 615 615 } 616 617 char **split_command_parts( char *command ) 618 { 619 static char *cmd[IRC_MAX_ARGS+1]; 620 char *s, q = 0; 621 int k; 622 623 memset( cmd, 0, sizeof( cmd ) ); 624 cmd[0] = command; 625 k = 1; 626 for( s = command; *s && k < IRC_MAX_ARGS; s ++ ) 627 if( *s == ' ' && !q ) 628 { 629 *s = 0; 630 while( *++s == ' ' ); 631 if( *s == '"' || *s == '\'' ) 632 { 633 q = *s; 634 s ++; 635 } 636 if( *s ) 637 { 638 cmd[k++] = s; 639 s --; 640 } 641 else 642 { 643 break; 644 } 645 } 646 else if( *s == '\\' && ( ( !q && s[1] ) || ( q && q == s[1] ) ) ) 647 { 648 char *cpy; 649 650 for( cpy = s; *cpy; cpy ++ ) 651 cpy[0] = cpy[1]; 652 } 653 else if( *s == q ) 654 { 655 q = *s = 0; 656 } 657 cmd[k] = NULL; 658 659 return cmd; 660 } -
lib/misc.h
re21c0f8 r24b8bbb 68 68 G_MODULE_EXPORT int md5_verify_password( char *password, char *hash ); 69 69 70 G_MODULE_EXPORT char **split_command_parts( char *command ); 71 70 72 #endif -
root_commands.c
re21c0f8 r24b8bbb 34 34 void root_command_string( irc_t *irc, char *command ) 35 35 { 36 char *cmd[IRC_MAX_ARGS]; 37 char *s; 38 int k; 39 char q = 0; 40 41 memset( cmd, 0, sizeof( cmd ) ); 42 cmd[0] = command; 43 k = 1; 44 for( s = command; *s && k < ( IRC_MAX_ARGS - 1 ); s ++ ) 45 if( *s == ' ' && !q ) 46 { 47 *s = 0; 48 while( *++s == ' ' ); 49 if( *s == '"' || *s == '\'' ) 50 { 51 q = *s; 52 s ++; 53 } 54 if( *s ) 55 { 56 cmd[k++] = s; 57 s --; 58 } 59 else 60 { 61 break; 62 } 63 } 64 else if( *s == '\\' && ( ( !q && s[1] ) || ( q && q == s[1] ) ) ) 65 { 66 char *cpy; 67 68 for( cpy = s; *cpy; cpy ++ ) 69 cpy[0] = cpy[1]; 70 } 71 else if( *s == q ) 72 { 73 q = *s = 0; 74 } 75 cmd[k] = NULL; 76 77 root_command( irc, cmd ); 36 root_command( irc, split_command_parts( command ) ); 78 37 } 79 38
Note: See TracChangeset
for help on using the changeset viewer.