+ if ( rdonly ) {
+ fprintf( stderr, "** %s opened read-only\n", p->filename );
+ }
+ p->from = 0;
+ p->to = filestat.st_size;
+ // Process any range variation
+ if ( range && *(++range) ) {
+ unsigned int a,b;
+ if ( RANGE( sscanf( range, "%u-%u%n", &a, &b, &c ), 2 ) ) {
+ p->from = a;
+ p->to = b;
+ } else if ( RANGE( sscanf( range, "%u--%u%n", &a, &b, &c ), 2 ) ) {
+ p->from = a;
+ p->to -= b;
+ } else if ( RANGE( sscanf( range, "%u-%n", &a, &c ), 1 ) ) {
+ p->from = a;
+ } else if ( RANGE( sscanf( range, "%u%n", &a, &c ), 1 ) ) {
+ p->from = a;
+ } else if ( RANGE( sscanf( range, "-%u%n", &b, &c ), 1 ) ) {
+ p->to = b;
+ } else if ( RANGE( sscanf( range, "--%u%n", &b, &c ), 1 ) ) {
+ p->to -= b;
+ } else if ( RANGE( sscanf( range, "-%n", &c), 0 ) ) {
+ // Acceptable as "start-end" range
+ } else {
+ fprintf( stderr, "** BAD RANGE: %s\n", argv[i] );
+ return 1;
+ }
+ }
+ p->start = sources.size; // the fusefile position of fragment
+ sources.size += p->to - p->from;