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

Diff for /src/usr.bin/tmux/client.c between version 1.146 and 1.147

version 1.146, 2020/06/01 09:43:00 version 1.147, 2020/06/10 07:27:10
Line 45 
Line 45 
         CLIENT_EXIT_LOST_SERVER,          CLIENT_EXIT_LOST_SERVER,
         CLIENT_EXIT_EXITED,          CLIENT_EXIT_EXITED,
         CLIENT_EXIT_SERVER_EXITED,          CLIENT_EXIT_SERVER_EXITED,
           CLIENT_EXIT_MESSAGE_PROVIDED
 } client_exitreason = CLIENT_EXIT_NONE;  } client_exitreason = CLIENT_EXIT_NONE;
 static int               client_exitflag;  static int               client_exitflag;
 static int               client_exitval;  static int               client_exitval;
 static enum msgtype      client_exittype;  static enum msgtype      client_exittype;
 static const char       *client_exitsession;  static const char       *client_exitsession;
   static char             *client_exitmessage;
 static const char       *client_execshell;  static const char       *client_execshell;
 static const char       *client_execcmd;  static const char       *client_execcmd;
 static int               client_attached;  static int               client_attached;
Line 207 
Line 209 
                 return ("exited");                  return ("exited");
         case CLIENT_EXIT_SERVER_EXITED:          case CLIENT_EXIT_SERVER_EXITED:
                 return ("server exited");                  return ("server exited");
           case CLIENT_EXIT_MESSAGE_PROVIDED:
                   return (client_exitmessage);
         }          }
         return ("unknown reason");          return ("unknown reason");
 }  }
Line 791 
Line 795 
                 client_dispatch_wait(imsg);                  client_dispatch_wait(imsg);
 }  }
   
   /* Process an exit message. */
   static void
   client_dispatch_exit_message(char *data, size_t datalen)
   {
           int     retval;
   
           if (datalen < sizeof retval && datalen != 0)
                   fatalx("bad MSG_EXIT size");
   
           if (datalen >= sizeof retval) {
                   memcpy(&retval, data, sizeof retval);
                   client_exitval = retval;
           }
   
           if (datalen > sizeof retval) {
                   datalen -= sizeof retval;
                   data += sizeof retval;
   
                   client_exitmessage = xmalloc(datalen);
                   memcpy(client_exitmessage, data, datalen);
                   client_exitmessage[datalen - 1] = '\0';
   
                   client_exitreason = CLIENT_EXIT_MESSAGE_PROVIDED;
           }
   }
   
 /* Dispatch imsgs when in wait state (before MSG_READY). */  /* Dispatch imsgs when in wait state (before MSG_READY). */
 static void  static void
 client_dispatch_wait(struct imsg *imsg)  client_dispatch_wait(struct imsg *imsg)
 {  {
         char            *data;          char            *data;
         ssize_t          datalen;          ssize_t          datalen;
         int              retval;  
         static int       pledge_applied;          static int       pledge_applied;
   
         /*          /*
Line 820 
Line 849 
         switch (imsg->hdr.type) {          switch (imsg->hdr.type) {
         case MSG_EXIT:          case MSG_EXIT:
         case MSG_SHUTDOWN:          case MSG_SHUTDOWN:
                 if (datalen != sizeof retval && datalen != 0)                  client_dispatch_exit_message(data, datalen);
                         fatalx("bad MSG_EXIT size");  
                 if (datalen == sizeof retval) {  
                         memcpy(&retval, data, sizeof retval);  
                         client_exitval = retval;  
                 }  
                 client_exitflag = 1;                  client_exitflag = 1;
                 client_exit();                  client_exit();
                 break;                  break;
Line 916 
Line 940 
                 proc_send(client_peer, MSG_EXITING, -1, NULL, 0);                  proc_send(client_peer, MSG_EXITING, -1, NULL, 0);
                 break;                  break;
         case MSG_EXIT:          case MSG_EXIT:
                 if (datalen != 0 && datalen != sizeof (int))                  client_dispatch_exit_message(data, datalen);
                         fatalx("bad MSG_EXIT size");                  if (client_exitreason == CLIENT_EXIT_NONE)
                           client_exitreason = CLIENT_EXIT_EXITED;
                 proc_send(client_peer, MSG_EXITING, -1, NULL, 0);                  proc_send(client_peer, MSG_EXITING, -1, NULL, 0);
                 client_exitreason = CLIENT_EXIT_EXITED;  
                 break;                  break;
         case MSG_EXITED:          case MSG_EXITED:
                 if (datalen != 0)                  if (datalen != 0)

Legend:
Removed from v.1.146  
changed lines
  Added in v.1.147