- unsigned int nminus = 0;
- char *ptr;
-
- /* the list must contain only digits and no more than one minus sign */
- for (ptr = (char *)list; *ptr; ptr++) {
- if (!isdigit(*ptr) && *ptr != '-') {
- error_msg_and_die("invalid byte or field list");
- }
- if (*ptr == '-') {
- nminus++;
- if (nminus > 1) {
- error_msg_and_die("invalid byte or field list");
- }
- }
- }
-
- /* handle single value 'N' case */
- if (nminus == 0) {
- startpos = strtol(list, &ptr, 10);
- if (startpos == 0) {
- error_msg_and_die("missing list of fields");
- }
- endpos = startpos;
- }
- /* handle multi-value cases */
- else if (nminus == 1) {
- /* handle 'N-' case */
- if (list[strlen(list) - 1] == '-') {
- startpos = strtol(list, &ptr, 10);
- }
- /* handle '-M' case */
- else if (list[0] == '-') {
- endpos = strtol(&list[1], NULL, 10);
- }
- /* handle 'N-M' case */
- else {
- startpos = strtol(list, &ptr, 10);
- endpos = strtol(ptr+1, &ptr, 10);
- }