diff options
-rw-r--r-- | cargs.c | 19 | ||||
-rw-r--r-- | rfb.h | 1 |
2 files changed, 15 insertions, 5 deletions
@@ -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; @@ -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[]); |