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.47 by root, Mon Feb 2 22:38:40 2009 UTC vs.
Revision 1.59 by sf-exg, Thu Jan 19 13:33:43 2012 UTC

1/*----------------------------------------------------------------------* 1/*----------------------------------------------------------------------*
2 * File: rxvtd.C 2 * File: rxvtd.C
3 *----------------------------------------------------------------------* 3 *----------------------------------------------------------------------*
4 * 4 *
5 * All portions of code are copyright by their respective author/s. 5 * All portions of code are copyright by their respective author/s.
6 * Copyright (c) 2003-2007 Marc Lehmann <pcg@goof.com> 6 * Copyright (c) 2003-2007 Marc Lehmann <schmorp@schmorp.de>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version. 11 * (at your option) any later version.
19 * along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *----------------------------------------------------------------------*/ 21 *----------------------------------------------------------------------*/
22 22
23#include "../config.h" 23#include "../config.h"
24#include <cstdio> 24#include <stdio.h>
25#include <cstdlib> 25#include <stdlib.h>
26#include <cstdarg> 26#include <stdarg.h>
27#include <cstring> 27#include <string.h>
28 28
29#include <unistd.h> 29#include <unistd.h>
30#include <fcntl.h> 30#include <fcntl.h>
31#include <sys/types.h> 31#include <sys/types.h>
32#include <sys/stat.h> 32#include <sys/stat.h>
39 39
40#if ENABLE_MLOCK 40#if ENABLE_MLOCK
41# include <sys/mman.h> 41# include <sys/mman.h>
42#endif 42#endif
43 43
44#include <cerrno> 44#include <errno.h>
45 45
46#include "rxvt.h" 46#include "rxvt.h"
47#include "rxvtdaemon.h" 47#include "rxvtdaemon.h"
48#include "libptytty.h" 48#include "libptytty.h"
49 49
100 fcntl (fd, F_SETFL, O_NONBLOCK); 100 fcntl (fd, F_SETFL, O_NONBLOCK);
101 101
102 sa.sun_family = AF_UNIX; 102 sa.sun_family = AF_UNIX;
103 strcpy (sa.sun_path, sockname); 103 strcpy (sa.sun_path, sockname);
104 104
105 unlink (rxvt_connection::unix_sockname ()); 105 unlink (sockname);
106 106
107 mode_t omask = umask (0077); 107 mode_t omask = umask (0077);
108 108
109 if (bind (fd, (sockaddr *)&sa, sizeof (sa))) 109 if (bind (fd, (sockaddr *)&sa, sizeof (sa)))
110 { 110 {
186 argv->push_back (strdup (tok)); 186 argv->push_back (strdup (tok));
187 else 187 else
188 return err ("protocol error: unexpected NEW token.\n"); 188 return err ("protocol error: unexpected NEW token.\n");
189 } 189 }
190 190
191 envv->push_back (0);
192
193 { 191 {
194 rxvt_term *term = new rxvt_term; 192 rxvt_term *term = new rxvt_term;
195 193
196 term->log_hook = &log_cb; 194 term->log_hook = &log_cb;
197 term->getfd_hook = &getfd_cb; 195 term->getfd_hook = &getfd_cb;
222 } 220 }
223 else 221 else
224 return err (); 222 return err ();
225} 223}
226 224
225int
226main (int argc, char *argv[])
227{
228 ptytty::init ();
229
227int opt_fork, opt_opendisplay, opt_quiet; 230 static char opt_fork, opt_opendisplay, opt_quiet;
228#if ENABLE_MLOCK 231#if ENABLE_MLOCK
229int opt_lock; 232 static char opt_lock;
230#endif 233#endif
231
232int
233main (int argc, const char *const *argv)
234{
235 rxvt_init ();
236 234
237 for (int i = 1; i < argc; i++) 235 for (int i = 1; i < argc; i++)
238 { 236 {
239 if (!strcmp (argv [i], "-f") || !strcmp (argv [i], "--fork")) 237 if (!strcmp (argv [i], "-f") || !strcmp (argv [i], "--fork"))
240 opt_fork = 1; 238 opt_fork = 1;
251 rxvt_log ("%s: unknown option '%s', aborting.\n", argv [0], argv [i]); 249 rxvt_log ("%s: unknown option '%s', aborting.\n", argv [0], argv [i]);
252 return EXIT_FAILURE; 250 return EXIT_FAILURE;
253 } 251 }
254 } 252 }
255 253
254 rxvt_init ();
255
256 // optionally open display and never release it. 256 // optionally open display and never release it.
257 if (opt_opendisplay) 257 if (opt_opendisplay)
258 if (const char *dpy = getenv ("DISPLAY")) 258 if (const char *dpy = getenv ("DISPLAY"))
259 displays.get (dpy ? dpy : ":0"); // move string logic into rxvt_display maybe? 259 displays.get (dpy ? dpy : ":0"); // move string logic into rxvt_display maybe?
260 260
276 { 276 {
277 pid = fork (); 277 pid = fork ();
278 } 278 }
279 279
280#if ENABLE_MLOCK 280#if ENABLE_MLOCK
281 // Optionally preform a mlockall so this process does not get swapped out. 281 // Optionally perform an mlockall so this process does not get swapped out.
282 if (opt_lock && pid == 0) 282 if (opt_lock && !pid)
283 if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) 283 if (mlockall (MCL_CURRENT | MCL_FUTURE) < 0)
284 perror("unable to lock into ram"); 284 perror ("unable to lock into ram");
285#endif 285#endif
286 286
287 if (opt_fork) 287 if (opt_fork)
288 { 288 {
289 if (pid < 0) 289 if (pid < 0)
292 return EXIT_FAILURE; 292 return EXIT_FAILURE;
293 } 293 }
294 else if (pid > 0) 294 else if (pid > 0)
295 _exit (EXIT_SUCCESS); 295 _exit (EXIT_SUCCESS);
296 296
297 ev_default_fork (); 297 ev_loop_fork (EV_DEFAULT_UC);
298 } 298 }
299 299
300 ev_loop (0); 300 ev_run ();
301 301
302 return EXIT_SUCCESS; 302 return EXIT_SUCCESS;
303} 303}
304 304

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines