aboutsummaryrefslogtreecommitdiff
path: root/doc/nx-X11_vs_XOrg69_patches/xprintf.c.NX.patch
blob: fa0796dc9e5470ee6d150762dd6a453a0e4d27de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
--- ./nx-X11/programs/Xserver/os/xprintf.c.X.original	2015-02-13 14:03:44.792440567 +0100
+++ ./nx-X11/programs/Xserver/os/xprintf.c	2015-02-10 19:13:13.480698017 +0100
@@ -43,6 +43,63 @@
 # endif
 #endif
     
+#ifdef NX_TRANS_SOCKET
+
+#define PANIC
+#define WARNING
+#undef  TEST
+#undef  DEBUG
+
+#define START_SIZE  256
+#define END_SIZE   2048
+
+char *
+Xvprintf(const char *format, va_list va)
+{
+    char *ret;
+    char *newret;
+    int size;
+    int r;
+
+    size = 0;
+
+    for (;;)
+    {
+      if (size == 0)
+      {
+        ret = (char *)malloc(START_SIZE);
+        if (ret == NULL)
+          return NULL;
+        size = START_SIZE;
+      }
+      else if (size < END_SIZE &&
+                   (newret = (char *) realloc(ret, 2 * size)) != NULL)
+      {
+        ret = newret;
+        size = 2 * size;
+      }
+      else
+      {
+        free(ret);
+        return NULL;
+      }
+
+      r = vsnprintf(ret, size, format, va);
+
+      if (r == -1 || r == size || r > size || r == size - 1)
+      {
+        continue;
+      }
+      else
+      {
+        ret[r] = 0;
+        return ret;
+      }
+    }
+}
+
+#else
+
 char *
 Xvprintf(const char *format, va_list va)
 {
@@ -63,6 +120,8 @@
     return ret;
 }
 
+#endif
+
 char *Xprintf(const char *format, ...)
 {
     char *ret;