Sync OpenBSD patchset 435:

Tidy identify message send into a separate function.
pull/1/head
Tiago Cunha 2009-10-23 17:37:41 +00:00
parent dc8b7d6b03
commit eaa188bb63
1 changed files with 36 additions and 30 deletions

View File

@ -1,4 +1,4 @@
/* $Id: client.c,v 1.79 2009-10-23 17:32:26 tcunha Exp $ */
/* $OpenBSD: client.c,v 1.26 2009/10/21 21:11:55 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -36,6 +36,7 @@
struct imsgbuf client_ibuf;
const char *client_exitmsg;
void client_send_identify(int);
void client_send_environ(void);
void client_write_server(enum msgtype, void *, size_t);
int client_dispatch(void);
@ -44,15 +45,12 @@ void client_suspend(void);
struct imsgbuf *
client_init(char *path, int cmdflags, int flags)
{
struct sockaddr_un sa;
struct stat sb;
struct msg_identify_data data;
struct winsize ws;
size_t size;
int fd, fd2, mode;
char *term;
struct sockaddr_un sa;
struct stat sb;
size_t size;
int fd, mode;
#ifdef HAVE_SETPROCTITLE
char rpathbuf[MAXPATHLEN];
char rpathbuf[MAXPATHLEN];
#endif
#ifdef HAVE_SETPROCTITLE
@ -107,26 +105,8 @@ server_started:
if (cmdflags & CMD_SENDENVIRON)
client_send_environ();
if (isatty(STDIN_FILENO)) {
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) == -1)
fatal("ioctl(TIOCGWINSZ)");
data.flags = flags;
if (getcwd(data.cwd, sizeof data.cwd) == NULL)
*data.cwd = '\0';
*data.term = '\0';
if ((term = getenv("TERM")) != NULL) {
if (strlcpy(data.term,
term, sizeof data.term) >= sizeof data.term)
*data.term = '\0';
}
if ((fd2 = dup(STDIN_FILENO)) == -1)
fatal("dup failed");
imsg_compose(&client_ibuf, MSG_IDENTIFY,
PROTOCOL_VERSION, -1, fd2, &data, sizeof data);
}
if (isatty(STDIN_FILENO))
client_send_identify(flags);
return (&client_ibuf);
@ -139,11 +119,37 @@ not_found:
return (NULL);
}
void
client_send_identify(int flags)
{
struct msg_identify_data data;
struct winsize ws;
char *term;
int fd;
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) == -1)
fatal("ioctl(TIOCGWINSZ)");
data.flags = flags;
if (getcwd(data.cwd, sizeof data.cwd) == NULL)
*data.cwd = '\0';
term = getenv("TERM");
if (term == NULL ||
strlcpy(data.term, term, sizeof data.term) >= sizeof data.term)
*data.term = '\0';
if ((fd = dup(STDIN_FILENO)) == -1)
fatal("dup failed");
imsg_compose(&client_ibuf,
MSG_IDENTIFY, PROTOCOL_VERSION, -1, fd, &data, sizeof data);
}
void
client_send_environ(void)
{
char **var;
struct msg_environ_data data;
char **var;
for (var = environ; *var != NULL; var++) {
if (strlcpy(data.var, *var, sizeof data.var) >= sizeof data.var)