argc and argv may be zero (which means to ignore them)

pull/1/head
dscho 20 years ago
parent e78a41c69c
commit b7dae538f6

@ -188,38 +188,44 @@ static rfbBool rfbInitConnection(rfbClient* client)
rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv) { rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv) {
int i,j; int i,j;
if(client->programName==0) if(argv==0 || argc==0 || *argc==0) {
client->programName=argv[0]; client->programName="";
client->serverHost="";
for (i = 1; i < *argc; i++) { client->serverPort=5900;
j = i; } else {
if (strcmp(argv[i], "-listen") == 0) { if(client->programName==0)
listenForIncomingConnections(client); client->programName=argv[0];
break;
} else if (strcmp(argv[i], "-play") == 0) { for (i = 1; i < *argc; i++) {
client->serverPort = -1; j = i;
j++; if (strcmp(argv[i], "-listen") == 0) {
} else if (i+1<*argc && strcmp(argv[i], "-encodings") == 0) { listenForIncomingConnections(client);
client->appData.encodingsString = argv[i+1]; break;
j+=2; } else if (strcmp(argv[i], "-play") == 0) {
} else { client->serverPort = -1;
char* colon=strchr(argv[i],':'); j++;
} else if (i+1<*argc && strcmp(argv[i], "-encodings") == 0) {
if(colon) { client->appData.encodingsString = argv[i+1];
client->serverHost=strdup(argv[i]); j+=2;
client->serverHost[(int)(colon-argv[i])]='\0';
client->serverPort=atoi(colon+1);
} else { } 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--;
} }
} }

Loading…
Cancel
Save