From 22405c3dddfe5cb78b792f3d6b20ba1e5bd427a9 Mon Sep 17 00:00:00 2001 From: dscho Date: Tue, 30 Apr 2002 14:06:50 +0000 Subject: [PATCH] command line handling --- cargs.c | 19 ++++++++++++++----- rfb.h | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cargs.c b/cargs.c index 6e41ae5..03696a3 100644 --- a/cargs.c +++ b/cargs.c @@ -35,6 +35,17 @@ rfbUsage(void) exit(1); } +/* purges COUNT arguments from ARGV at POSITION and decrements ARGC. + POSITION points to the first non purged argument afterwards. */ +void rfbPurgeArguments(int* argc,int* position,int count,char *argv[]) +{ + int amount=(*argc)-(*position)-count; + if(amount) + memmove(argv+(*position),argv+(*position)+count,sizeof(char*)*amount); + (*argc)-=count; + (*position)--; +} + void rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]) { @@ -80,12 +91,10 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]) rfbScreen->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; - } + if(i != i1) + rfbPurgeArguments(argc,&i,i1-i,argv); i1++; - i = i1-1; + i++; } } *argc -= i-i1; diff --git a/rfb.h b/rfb.h index 1903d2a..e4e873e 100644 --- a/rfb.h +++ b/rfb.h @@ -760,6 +760,7 @@ extern int rfbSelectBox(rfbScreenInfoPtr rfbScreen, /* cargs.c */ extern void rfbUsage(); +extern void rfbPurgeArguments(int* argc,int* position,int count,char *argv[]); extern void rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]); extern void rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[]);