/[weechat]/weechat/src/irc/irc-server.c
ViewVC logotype

Diff of /weechat/src/irc/irc-server.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.72 by flashcode, Thu Sep 15 14:02:38 2005 UTC revision 1.73 by flashcode, Thu Oct 27 10:28:20 2005 UTC
# Line 477  void Line 477  void
477  server_msgq_add_msg (t_irc_server *server, char *msg)  server_msgq_add_msg (t_irc_server *server, char *msg)
478  {  {
479      t_irc_message *message;      t_irc_message *message;
480        
481        if (!server->unterminated_message && !msg[0])
482            return;
483        
484      message = (t_irc_message *) malloc (sizeof (t_irc_message));      message = (t_irc_message *) malloc (sizeof (t_irc_message));
485      if (!message)      if (!message)
486      {      {
# Line 530  server_msgq_add_msg (t_irc_server *serve Line 533  server_msgq_add_msg (t_irc_server *serve
533  void  void
534  server_msgq_add_unterminated (t_irc_server *server, char *string)  server_msgq_add_unterminated (t_irc_server *server, char *string)
535  {  {
536        if (!string[0])
537            return;
538        
539      if (server->unterminated_message)      if (server->unterminated_message)
540      {      {
541          server->unterminated_message =          server->unterminated_message =
# Line 566  server_msgq_add_unterminated (t_irc_serv Line 572  server_msgq_add_unterminated (t_irc_serv
572  void  void
573  server_msgq_add_buffer (t_irc_server *server, char *buffer)  server_msgq_add_buffer (t_irc_server *server, char *buffer)
574  {  {
575      char *pos;      char *pos_cr, *pos_lf;
576    
577      while (buffer[0])      while (buffer[0])
578      {      {
579          pos = strstr (buffer, "\r\n");          pos_cr = strchr (buffer, '\r');
580          if (pos)          pos_lf = strchr (buffer, '\n');
581          {          
582              pos[0] = '\0';          if (!pos_cr && !pos_lf)
583              server_msgq_add_msg (server, buffer);          {
584              buffer = pos + 2;              /* no CR/LF found => add to unterminated and return */
585                server_msgq_add_unterminated (server, buffer);
586                return;
587            }
588            
589            if (pos_cr && ((!pos_lf) || (pos_lf > pos_cr)))
590            {
591                /* found '\r' first => ignore this char */
592                pos_cr[0] = '\0';
593                server_msgq_add_unterminated (server, buffer);
594                buffer = pos_cr + 1;
595          }          }
596          else          else
597          {          {
598              pos = strstr (buffer, "\r");              /* found: '\n' first => terminate message */
599              if (pos && !pos[1])              pos_lf[0] = '\0';
600              {              server_msgq_add_msg (server, buffer);
601                  pos[0] = '\0';              buffer = pos_lf + 1;
                 server_msgq_add_unterminated (server, buffer);  
                 return;  
             }  
             else  
             {  
                 pos = strstr (buffer, "\n");  
                 if (pos)  
                 {  
                     pos[0] = '\0';  
                     server_msgq_add_msg (server, buffer);  
                     buffer = pos + 1;  
                 }  
                 else  
                 {  
                     server_msgq_add_unterminated (server, buffer);  
                     return;  
                 }  
             }  
602          }          }
603      }      }
604  }  }
# Line 630  server_msgq_flush () Line 628  server_msgq_flush ()
628              while (ptr_data[0] == ' ')              while (ptr_data[0] == ' ')
629                  ptr_data++;                  ptr_data++;
630                            
631              if (ptr_data)              if (ptr_data && ptr_data[0])
632              {              {
633  #ifdef DEBUG  #ifdef DEBUG
634                  gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data);                  gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data);
# Line 650  server_msgq_flush () Line 648  server_msgq_flush ()
648                  else                  else
649                      pos = ptr_data;                      pos = ptr_data;
650                                    
651                  if (pos != NULL)                  if (pos && pos[0])
652                  {                  {
653                      while (pos[0] == ' ')                      while (pos[0] == ' ')
654                          pos++;                          pos++;
655                      pos2 = strchr (pos, ' ');                      pos2 = strchr (pos, ' ');
656                      if (pos2 != NULL)                      if (pos2)
657                      {                      {
658                          pos2[0] = '\0';                          pos2[0] = '\0';
659                          command = strdup (pos);                          command = strdup (pos);

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.73

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26