diff options
author | dscho <dscho> | 2002-04-30 14:06:50 +0000 |
---|---|---|
committer | dscho <dscho> | 2002-04-30 14:06:50 +0000 |
commit | 22405c3dddfe5cb78b792f3d6b20ba1e5bd427a9 (patch) | |
tree | ff2538b39f237932b0dac11cd1ff2e785495dccc | |
parent | dae41e0b3e72620cee8dd496f9f5271d791ee58f (diff) | |
download | libtdevnc-22405c3dddfe5cb78b792f3d6b20ba1e5bd427a9.tar.gz libtdevnc-22405c3dddfe5cb78b792f3d6b20ba1e5bd427a9.zip |
command line handling
-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[]); |