ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtd.C
(Generate patch)

Comparing rxvt-unicode/src/rxvtd.C (file contents):
Revision 1.29 by root, Mon Feb 20 22:42:00 2006 UTC vs.
Revision 1.31 by root, Fri Aug 18 23:03:31 2006 UTC

69}; 69};
70 70
71unix_listener::unix_listener (const char *sockname) 71unix_listener::unix_listener (const char *sockname)
72: accept_ev (this, &unix_listener::accept_cb) 72: accept_ev (this, &unix_listener::accept_cb)
73{ 73{
74 sockaddr_un sa;
75
76 if (strlen (sockname) >= sizeof(sa.sun_path))
77 {
78 fputs ("socket name too long, aborting.\n", stderr);
79 exit (EXIT_FAILURE);
80 }
81
74 if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) 82 if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
75 { 83 {
76 perror ("unable to create listening socket"); 84 perror ("unable to create listening socket");
77 exit (EXIT_FAILURE); 85 exit (EXIT_FAILURE);
78 } 86 }
79 87
80 fcntl (fd, F_SETFD, FD_CLOEXEC); 88 fcntl (fd, F_SETFD, FD_CLOEXEC);
81
82 sockaddr_un sa;
83 89
84 sa.sun_family = AF_UNIX; 90 sa.sun_family = AF_UNIX;
85 strcpy (sa.sun_path, sockname); 91 strcpy (sa.sun_path, sockname);
86 92
87 unlink (rxvt_connection::unix_sockname ()); 93 unlink (rxvt_connection::unix_sockname ());
140 va_end (ap); 146 va_end (ap);
141 147
142 send ("MSG"), send (err); 148 send ("MSG"), send (err);
143 } 149 }
144 150
145 send ("END", 0); 151 send ("END"); send (0);
146 close (fd); 152 close (fd);
147 delete this; 153 delete this;
148} 154}
149 155
150void server::read_cb (io_watcher &w, short revents) 156void server::read_cb (io_watcher &w, short revents)
155 { 161 {
156 if (!strcmp (tok, "NEW")) 162 if (!strcmp (tok, "NEW"))
157 { 163 {
158 stringvec *argv = new stringvec; 164 stringvec *argv = new stringvec;
159 stringvec *envv = new stringvec; 165 stringvec *envv = new stringvec;
160 166
161 for (;;) 167 for (;;)
162 { 168 {
163 if (!recv (tok)) 169 if (!recv (tok))
164 return err (); 170 return err ();
165 171
168 else if (!strcmp (tok, "ENV") && recv (tok)) 174 else if (!strcmp (tok, "ENV") && recv (tok))
169 envv->push_back (strdup (tok)); 175 envv->push_back (strdup (tok));
170 else if (!strcmp (tok, "CWD") && recv (tok)) 176 else if (!strcmp (tok, "CWD") && recv (tok))
171 { 177 {
172 if (chdir (tok)) 178 if (chdir (tok))
179 {
180 delete envv;
181 delete argv;
173 err ("unable to change to working directory to '%s': %s", 182 return err ("unable to change to working directory to '%s', aborting: %s.\n",
174 (char *)tok, strerror (errno)); 183 (char *)tok, strerror (errno));
184 }
175 } 185 }
176 else if (!strcmp (tok, "ARG") && recv (tok)) 186 else if (!strcmp (tok, "ARG") && recv (tok))
177 argv->push_back (strdup (tok)); 187 argv->push_back (strdup (tok));
178 else 188 else
179 return err ("protocol error: unexpected NEW token"); 189 return err ("protocol error: unexpected NEW token.\n");
180 } 190 }
181 191
182 envv->push_back (0); 192 envv->push_back (0);
183 193
184 { 194 {
207 217
208 send ("END"); send (success ? 1 : 0); 218 send ("END"); send (success ? 1 : 0);
209 } 219 }
210 } 220 }
211 else 221 else
212 return err ("protocol error: request '%s' unsupported.", (char *)tok); 222 return err ("protocol error: request '%s' unsupported.\n", (char *)tok);
213 } 223 }
214 else 224 else
215 return err (); 225 return err ();
216} 226}
217 227

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines