translate 0x0a to 0x0d 0x0a in SOL
authorMichael Gernoth <michael@gernoth.net>
Mon, 12 May 2008 13:32:34 +0000 (15:32 +0200)
committerMichael Gernoth <michael@gernoth.net>
Mon, 12 May 2008 13:32:34 +0000 (15:32 +0200)
redir.c

diff --git a/redir.c b/redir.c
index 9731715..9c72bf7 100644 (file)
--- a/redir.c
+++ b/redir.c
@@ -236,13 +236,27 @@ int redir_sol_send(struct redir *r, unsigned char *buf, int blen)
 {
     int len = 10+blen;
     int rc;
-    unsigned char *request = malloc(len);
+    int i,j;
+    unsigned char *request;
+
+    for (i = 0; i < blen; i++) {
+       if (buf[i] == 0x0a)
+               len++;
+    }
+
+    request = malloc(len);
 
     memset(request, 0, len);
     request[0] = SOL_DATA_TO_HOST;
-    request[8] = blen & 0xff;
-    request[9] = blen >> 8;
-    memcpy(request + 10, buf, blen);
+    request[8] = (len-10) & 0xff;
+    request[9] = (len-10) >> 8;
+    for (i=0, j=0; i < blen; i++,j++) {
+       if (buf[i] == 0x0a) {
+               request[j + 10] = 0x0d;
+               j++;
+       }
+       request[j + 10] = buf[i];
+    }
     rc = redir_write(r, request, len);
     free(request);
     return rc;
Impressum, Datenschutz