[BACK]Return to server-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/server-client.c between version 1.399 and 1.400

version 1.399, 2023/01/16 11:26:14 version 1.400, 2023/02/05 21:15:32
Line 29 
Line 29 
 #include <string.h>  #include <string.h>
 #include <time.h>  #include <time.h>
 #include <unistd.h>  #include <unistd.h>
   #include <vis.h>
   
 #include "tmux.h"  #include "tmux.h"
   
Line 3238 
Line 3239 
                         free(cw);                          free(cw);
                 }                  }
         }          }
   }
   
   /* Print to a client. */
   void
   server_client_print(struct client *c, int parse, struct evbuffer *evb)
   {
           void                            *data = EVBUFFER_DATA(evb);
           size_t                           size = EVBUFFER_LENGTH(evb);
           struct window_pane              *wp;
           struct window_mode_entry        *wme;
           char                            *sanitized, *msg, *line;
   
           if (!parse) {
                   utf8_stravisx(&msg, data, size,
                       VIS_OCTAL|VIS_CSTYLE|VIS_NOSLASH);
                   log_debug("%s: %s", __func__, msg);
           } else {
                   msg = EVBUFFER_DATA(evb);
                   if (msg[size - 1] != '\0')
                           evbuffer_add(evb, "", 1);
           }
   
           if (c == NULL)
                   goto out;
   
           if (c->session == NULL || (c->flags & CLIENT_CONTROL)) {
                   if (~c->flags & CLIENT_UTF8) {
                           sanitized = utf8_sanitize(msg);
                           if (c->flags & CLIENT_CONTROL)
                                   control_write(c, "%s", sanitized);
                           else
                                   file_print(c, "%s\n", sanitized);
                           free(sanitized);
                   } else {
                           if (c->flags & CLIENT_CONTROL)
                                   control_write(c, "%s", msg);
                           else
                                   file_print(c, "%s\n", msg);
                   }
                   goto out;
           }
   
           wp = server_client_get_pane(c);
           wme = TAILQ_FIRST(&wp->modes);
           if (wme == NULL || wme->mode != &window_view_mode)
                   window_pane_set_mode(wp, NULL, &window_view_mode, NULL, NULL);
           if (parse) {
                   do {
                           line = evbuffer_readln(evb, NULL, EVBUFFER_EOL_LF);
                           if (line != NULL) {
                                   window_copy_add(wp, 1, "%s", line);
                                   free(line);
                           }
                   } while (line != NULL);
   
                   size = EVBUFFER_LENGTH(evb);
                   if (size != 0) {
                           line = EVBUFFER_DATA(evb);
                           window_copy_add(wp, 1, "%.*s", (int)size, line);
                   }
           } else
                   window_copy_add(wp, 0, "%s", msg);
   
   out:
           if (!parse)
                   free(msg);
 }  }

Legend:
Removed from v.1.399  
changed lines
  Added in v.1.400