From b7dae538f671a4598390d4f074c86c7ad3fdd796 Mon Sep 17 00:00:00 2001 From: dscho Date: Fri, 14 Jan 2005 14:33:52 +0000 Subject: [PATCH] argc and argv may be zero (which means to ignore them) --- libvncclient/vncviewer.c | 66 ++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/libvncclient/vncviewer.c b/libvncclient/vncviewer.c index c97b234..07465c7 100644 --- a/libvncclient/vncviewer.c +++ b/libvncclient/vncviewer.c @@ -188,38 +188,44 @@ static rfbBool rfbInitConnection(rfbClient* client) rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv) { int i,j; - if(client->programName==0) - client->programName=argv[0]; - - for (i = 1; i < *argc; i++) { - j = i; - if (strcmp(argv[i], "-listen") == 0) { - listenForIncomingConnections(client); - break; - } else if (strcmp(argv[i], "-play") == 0) { - client->serverPort = -1; - j++; - } else if (i+1<*argc && strcmp(argv[i], "-encodings") == 0) { - client->appData.encodingsString = argv[i+1]; - j+=2; - } else { - char* colon=strchr(argv[i],':'); - - if(colon) { - client->serverHost=strdup(argv[i]); - client->serverHost[(int)(colon-argv[i])]='\0'; - client->serverPort=atoi(colon+1); + if(argv==0 || argc==0 || *argc==0) { + client->programName=""; + client->serverHost=""; + client->serverPort=5900; + } else { + if(client->programName==0) + client->programName=argv[0]; + + for (i = 1; i < *argc; i++) { + j = i; + if (strcmp(argv[i], "-listen") == 0) { + listenForIncomingConnections(client); + break; + } else if (strcmp(argv[i], "-play") == 0) { + client->serverPort = -1; + j++; + } else if (i+1<*argc && strcmp(argv[i], "-encodings") == 0) { + client->appData.encodingsString = argv[i+1]; + j+=2; } else { - client->serverHost=strdup(argv[i]); + char* colon=strchr(argv[i],':'); + + if(colon) { + client->serverHost=strdup(argv[i]); + client->serverHost[(int)(colon-argv[i])]='\0'; + client->serverPort=atoi(colon+1); + } else { + client->serverHost=strdup(argv[i]); + } + if(client->serverPort>=0 && client->serverPort<5900) + client->serverPort+=5900; + } + /* purge arguments */ + if (j>i) { + *argc-=j-i; + memmove(argv+i,argv+j,(*argc-i)*sizeof(char*)); + i--; } - if(client->serverPort>=0 && client->serverPort<5900) - client->serverPort+=5900; - } - /* purge arguments */ - if (j>i) { - *argc-=j-i; - memmove(argv+i,argv+j,(*argc-i)*sizeof(char*)); - i--; } }