From fd274f08ac8766104d395df8f8d9ddbc507dbd80 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@llnl.gov> Date: Thu, 5 Jan 2006 22:54:04 +0000 Subject: [PATCH] fix for down bug --- src/smap/configure_functions.c | 82 +++++++++++++++------------------- 1 file changed, 35 insertions(+), 47 deletions(-) diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c index 0b35e9bf35a..68de34a2e7e 100644 --- a/src/smap/configure_functions.c +++ b/src/smap/configure_functions.c @@ -324,10 +324,10 @@ static int _change_state_all_bps(char *com, int state) memset(allnodes,0,50); #ifdef HAVE_BG - sprintf(allnodes, "[000x%d%d%d]", + sprintf(allnodes, "000x%d%d%d", DIM_SIZE[X]-1, DIM_SIZE[Y]-1, DIM_SIZE[Z]-1); #else - sprintf(allnodes, "[0-%d]", + sprintf(allnodes, "0-%d", DIM_SIZE[X]); #endif return _change_state_bps(allnodes, state); @@ -335,7 +335,7 @@ static int _change_state_all_bps(char *com, int state) } static int _change_state_bps(char *com, int state) { - int i=1,x; + int i=0, j=0, x; int len = strlen(com); int start[SYSTEM_DIMENSIONS], end[SYSTEM_DIMENSIONS]; #ifdef HAVE_BG @@ -352,48 +352,41 @@ static int _change_state_bps(char *com, int state) used = true; c_state = "down"; } - while((com[i-1] > 57 || com[i-1] < 48) && com[i-1] != '[') + while((com[i] > 57 || com[i] < 48) && i<len) i++; if(i>(len-1)) { memset(error_string,0,255); sprintf(error_string, - "You didn't specify any nodes to make %s. %s", c_state, com); + "You didn't specify any nodes to make %s. " + "in statement '%s'", + c_state, com); return 0; } #ifdef HAVE_BG - if ((com[i] == '[') - && (com[i+8] == ']') - && ((com[i+4] == 'x') - || (com[i+4] == '-'))) { - i++; + if ((com[i+3] == 'x') + || (com[i+3] == '-')) { + j=i; + for(j=0; j<3; j++) + if(com[i+j] > 57 || com[i+j] < 48 || (i+j)>len) + goto error_message2; number = atoi(com + i); start[X] = number / 100; start[Y] = (number % 100) / 10; start[Z] = (number % 10); i += 4; - number = atoi(com + i); - end[X] = number / 100; - end[Y] = (number % 100) / 10; - end[Z] = (number % 10); - - } else if ((com[i] < 58 && com[i] > 47) - && (com[i+6] < 58 && com[i+6] > 47) - && ((com[i+3] == 'x') - || (com[i+3] == '-'))) { - - number = atoi(com + i); - start[X] = number / 100; - start[Y] = (number % 100) / 10; - start[Z] = (number % 10); - i += 4; - number = atoi(com + i); + for(j=0; j<3; j++) + if(com[i+j] > 57 || com[i+j] < 48 || (i+j)>len) + goto error_message2; + number = atoi(com + i); end[X] = number / 100; end[Y] = (number % 100) / 10; end[Z] = (number % 10); - } else if((com[i] < 58 && com[i] > 47) - && com[i-1] != '[') { + } else { + for(j=0; j<3; j++) + if(com[i+j] > 57 || com[i+j] < 48 || (i+j)>len) + goto error_message2; number = atoi(com + i); start[X] = end[X] = number / 100; start[Y] = end[Y] = (number % 100) / 10; @@ -409,7 +402,7 @@ static int _change_state_bps(char *com, int state) || end[Y]>DIM_SIZE[Y]-1 || end[Z]>DIM_SIZE[Z]-1)) goto error_message; - + for(x=start[X];x<=end[X];x++) { for(y=start[Y];y<=end[Y];y++) { for(z=start[Z];z<=end[Z];z++) { @@ -423,27 +416,15 @@ static int _change_state_bps(char *com, int state) } } #else - if ((com[i] == '[') - && (com[i+8] == ']') - && ((com[i+4] == 'x') - || (com[i+4] == '-'))) { - i++; - start[X] = atoi(com + i); - i += 4; - end[X] = atoi(com + i); - } else if ((com[i] < 58 && com[i] > 47) - && (com[i+6] < 58 && com[i+6] > 47) - && ((com[i+3] == 'x') - || (com[i+3] == '-'))) { - + if ((com[i+3] == 'x') + || (com[i+3] == '-')) { start[X] = atoi(com + i); i += 4; - end[X] = atoi(com + i); - } else if((com[i] < 58 && com[i] > 47) - && com[i-1] != '[') { - start[X] = end[X] = atoi(com + i); - + end[X] = atoi(com + i);j=i; + } else { + start[X] = end[X] = atoi(com + i); } + if((start[X]>end[X]) || (start[X]<0) || (end[X]>DIM_SIZE[X]-1)) @@ -469,6 +450,13 @@ error_message: start[X],end[X]); #endif return 0; +error_message2: + memset(error_string,0,255); + sprintf(error_string, + "There was a problem with '%s'\nIn your request '%s'" + "You need to specify XYZ or XYZxXYZ", + com+i,com); + return 0; } static int _remove_allocation(char *com, List allocated_blocks) { -- GitLab