From 357844447caa9af50f78fb3cc17309621ee90e76 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Mon, 30 Dec 2002 09:33:35 +0000
Subject: fixed cargs (segmentation fault!)

---
 CHANGES |  3 +++
 cargs.c | 29 +++++++++++------------------
 2 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/CHANGES b/CHANGES
index 0f49c74..d0ad1ce 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+   fixed long standing cargs bug
+   Even better x11vnc from Karl J. Runge! (supports different kbd layouts of
+	client/server)
    Better x11vnc from Karl J. Runge!
    fixed severe bug (Const Kaplinsky)
    got patch from Const Kaplisnky with CursorPosUpdate encoding and some Docs
diff --git a/cargs.c b/cargs.c
index 03696a3..25d57e4 100644
--- a/cargs.c
+++ b/cargs.c
@@ -53,7 +53,7 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
 
     if(!argc) return;
     
-    for (i = i1 = 1; i < *argc; i++) {
+    for (i = i1 = 1; i < *argc;) {
         if (strcmp(argv[i], "-help") == 0) {
 	    rfbUsage();
 	    exit(1);
@@ -73,7 +73,7 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
 	    passwds[1] = 0;
 	    rfbScreen->rfbAuthPasswdData = (void*)passwds;
 	    rfbScreen->passwordCheck = rfbCheckPasswordByList;
-        } else if (strcmp(argv[i], "-deferupdate") == 0) {  /* -desktop desktop-name */
+        } else if (strcmp(argv[i], "-deferupdate") == 0) {  /* -deferupdate milliseconds */
             if (i + 1 >= *argc) rfbUsage();
             rfbScreen->rfbDeferUpdateTime = atoi(argv[++i]);
         } else if (strcmp(argv[i], "-desktop") == 0) {  /* -desktop desktop-name */
@@ -85,19 +85,14 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
             rfbScreen->rfbNeverShared = TRUE;
         } else if (strcmp(argv[i], "-dontdisconnect") == 0) {
             rfbScreen->rfbDontDisconnect = TRUE;
-        } else if (strcmp(argv[i], "-width") == 0) {
-               rfbScreen->width = atoi(argv[++i]);
-        } else if (strcmp(argv[i], "-height") == 0) {
-               rfbScreen->height = atoi(argv[++i]);
         } else {
 	    /* we just remove the processed arguments from the list */
 	    if(i != i1)
-	        rfbPurgeArguments(argc,&i,i1-i,argv);
-	    i1++;
-	    i++;
+	        rfbPurgeArguments(argc,&i1,i-i1,argv);
         }
+	i1++;
+	i=i1;
     }
-    *argc -= i-i1;
 }
 
 void rfbSizeUsage()
@@ -113,7 +108,7 @@ rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[])
     int i,i1;
 
     if(!argc) return;
-    for (i = i1 = 1; i < *argc-1; i++) {
+    for (i = i1 = 1; i < *argc-1;) {
         if (strcmp(argv[i], "-bpp") == 0) {
                *bpp = atoi(argv[++i]);
         } else if (strcmp(argv[i], "-width") == 0) {
@@ -122,14 +117,12 @@ rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[])
                *height = atoi(argv[++i]);
         } else {
 	    /* we just remove the processed arguments from the list */
-	    if(i != i1) {
-	        memmove(argv+i1,argv+i,sizeof(char*)*(*argc-i));
-		*argc -= i-i1;
-	    }
-	    i1++;
-	    i = i1-1;
+	    if(i != i1)
+	    if(i != i1)
+	        rfbPurgeArguments(argc,&i1,i-i1,argv);
         }
+	i1++;
+	i=i1;
     }
-    *argc -= i-i1;
 }
 
-- 
cgit v1.2.3

