}\r
}\r
\r
-\r
-static void quicksort(uint32_t* const start, uint32_t* const stop)\r
-{\r
- uint32_t *it = start + 1, *rit = stop;\r
-\r
- if(it > rit)\r
- return;\r
-\r
- while(it < rit)\r
- if(*it <= *start)\r
- ++it;\r
- else if(*rit > *start)\r
- --rit;\r
- else\r
- *it ^= (*it ^= *rit, *rit ^= *it);\r
-\r
- if(*rit >= *start)\r
- --rit;\r
- if(rit != start)\r
- *rit ^= (*rit ^= *start, *start ^= *rit);\r
-\r
- quicksort(start, rit - 1);\r
- quicksort(rit + 1, stop);\r
-}\r
-\r
-\r
/** binsearch\r
* Binary search for the first occurence of *stop's MSB in sorted [start,stop]\r
*/\r
\r
statelist = malloc((sizeof *statelist) << 21); //how large should be? \r
if(!statelist || !odd || !even)\r
- return 0;\r
+ {\r
+ free(statelist);\r
+ free(odd);\r
+ free(even);\r
+ return 0;\r
+ }\r
\r
s = statelist;\r
for(o = odd; *o != -1; ++o)\r