This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Peter Stuge peter at stuge.sePeter Stuge wrote: > > if (',' == *p) > > p++; > > Here it should actually also throw parse error if there is any other > character than comma or end-of-input: And there was an off-by-one error for the upper bound of a range. I think I've caught all the issues in this version of the file. :) //Peter -------------- next part -------------- #include <stdio.h> #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /* MIN */ #ifndef MAX #define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif /* MAX */ #ifndef ARRAY_SIZE #define ARRAY_SIZE(a) (sizeof (a) / sizeof (a)[0]) #endif /* ARRAY_SIZE */ int main(int argc,const char *argv[]) { int i,val[16]; int a,b,n1,n2; const char *p; if(argc<2) { fprintf(stderr,"usage: %s int[-int][,...]\n",*argv); return 1; } for(i=0;i<ARRAY_SIZE(val);i++) val[i]=0; p = argv[1]; do { switch (sscanf(p, "%d%n-%d%n", &a, &n1, &b, &n2)) { case 0: fprintf(stderr, "invalid input at '%.5s'\n", p); return 2; case -1: perror("sscanf"); return 3; case 1: if (a < ARRAY_SIZE(val)) val[a] = 1; p += n1; break; case 2: b = MIN(MAX(a, b), ARRAY_SIZE(val) - 1); for (i = MIN(a, b); i <= b; i++) val[i] = 1; p += n2; break; } if (',' == *p) p++; else if (*p) { fprintf(stderr, "invalid input at '%.5s'\n", p); return 4; } } while (*p); for (i = 0; i < ARRAY_SIZE(val); i++) printf("val[%d]=%d\n", i, val[i]); return 0; }