Changes in ipc.c [171ef85:edc767b]
Legend:
- Unmodified
- Added
- Removed
-
ipc.c
r171ef85 redc767b 209 209 } 210 210 211 /* Return just one line. Returns NULL if something broke, an empty string 212 on temporary "errors" (EAGAIN and friends). */ 211 213 static char *ipc_readline( int fd ) 212 214 { 213 char *buf, *eol;215 char buf[513], *eol; 214 216 int size; 215 216 buf = g_new0( char, 513 );217 217 218 218 /* Because this is internal communication, it should be pretty safe … … 221 221 sockets and limites message length, messages should always be 222 222 complete. Saves us quite a lot of code and buffering. */ 223 size = recv( fd, buf, 512, MSG_PEEK );223 size = recv( fd, buf, sizeof( buf ) - 1, MSG_PEEK ); 224 224 if( size == 0 || ( size < 0 && !sockerr_again() ) ) 225 225 return NULL; … … 229 229 buf[size] = 0; 230 230 231 eol = strstr( buf, "\r\n" ); 232 if( eol == NULL ) 231 if( ( eol = strstr( buf, "\r\n" ) ) == NULL ) 233 232 return NULL; 234 233 else 235 234 size = eol - buf + 2; 236 237 g_free( buf );238 buf = g_new0( char, size + 1 );239 235 240 236 if( recv( fd, buf, size, 0 ) != size ) 241 237 return NULL; 242 238 else 243 buf[size-2] = 0; 244 245 return buf; 239 return g_strndup( buf, size - 2 ); 246 240 } 247 241 … … 254 248 cmd = irc_parse_line( buf ); 255 249 if( cmd ) 250 { 256 251 ipc_command_exec( data, cmd, ipc_master_commands ); 252 g_free( cmd ); 253 } 254 g_free( buf ); 257 255 } 258 256 else … … 272 270 cmd = irc_parse_line( buf ); 273 271 if( cmd ) 272 { 274 273 ipc_command_exec( data, cmd, ipc_child_commands ); 274 g_free( cmd ); 275 } 276 g_free( buf ); 275 277 } 276 278 else
Note: See TracChangeset
for help on using the changeset viewer.