ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtdaemon.C
Revision: 1.4
Committed: Sat Jan 17 01:20:01 2004 UTC (20 years, 4 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_1_0, rel-2_4, rel-2_2, rel-2_3, rel-2_0, rel-1_9, before_astyle, after_astyle
Changes since 1.3: +1 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 #include <stdint.h>
2     #include <cstdlib>
3     #include <cstring>
4 pcg 1.4 #include <cstdio>
5 pcg 1.1
6 pcg 1.3 #include <unistd.h>
7     #include <sys/utsname.h>
8     #include <limits.h>
9    
10 pcg 1.1 #include "rxvtdaemon.h"
11    
12 pcg 1.3 char *rxvt_connection::unix_sockname ()
13 pcg 1.1 {
14 pcg 1.3 char name[PATH_MAX];
15     char *path = getenv ("RXVT_SOCKET");
16    
17     if (!path)
18     {
19     struct utsname u;
20     uname (&u);
21    
22     path = getenv ("HOME");
23     snprintf (name, PATH_MAX, "%s/.rxvt-%s",
24     path ? path : "/tmp",
25     u.nodename);
26    
27     path = name;
28     }
29    
30     return strdup (path);
31 pcg 1.1 }
32    
33     void rxvt_connection::send (const char *data, int len)
34     {
35     uint8_t s[2];
36    
37     s[0] = len >> 8; s[1] = len;
38    
39     write (fd, s, 2);
40     write (fd, data, len);
41     }
42    
43     void rxvt_connection::send (const char *data)
44     {
45     send (data, strlen (data));
46     }
47    
48 pcg 1.2 bool rxvt_connection::recv (auto_str &data, int *len)
49 pcg 1.1 {
50     uint8_t s[2];
51     int l;
52    
53     if (read (fd, s, 2) != 2)
54     return false;
55    
56     l = (s[0] << 8) + s[1];
57     if (l > 4096)
58     return false;
59    
60     if (len)
61     *len = l;
62    
63     data = new char[l + 1];
64    
65     if (!data)
66     return false;
67    
68     if (read (fd, data, l) != l)
69     return false;
70    
71     data[l] = 0;
72    
73     return true;
74     }
75    
76     void rxvt_connection::send (int data)
77     {
78     uint8_t s[4];
79    
80     s[0] = data >> 24; s[1] = data >> 16; s[0] = data >> 8; s[1] = data;
81    
82     write (fd, s, 4);
83     }
84    
85     bool rxvt_connection::recv (int &data)
86     {
87     uint8_t s[4];
88    
89     if (read (fd, s, 4) != 4)
90     return false;
91    
92     data = (((((s[0] << 8) | s[1]) << 8) | s[2]) << 8) | s[3];
93    
94     return true;
95     }
96    
97    
98