|  | @@ -1,17 +1,17 @@
 | 
	
		
			
				|  |  |  #include <stdio.h>
 | 
	
		
			
				|  |  |  #include <stdlib.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -char* data = NULL;
 | 
	
		
			
				|  |  | +static char* data = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -int hasBit(int index) {
 | 
	
		
			
				|  |  | +static int hasBit(size_t index) {
 | 
	
		
			
				|  |  |      return (data[index >> 3] & (1 << (index & 7))) == 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void setBit(int index) {
 | 
	
		
			
				|  |  | -    data[index >> 3] |= (1 << (index & 7));
 | 
	
		
			
				|  |  | +static void setBit(size_t index) {
 | 
	
		
			
				|  |  | +    data[index >> 3] |= (char)(1 << (index & 7));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -int divideRound8(int i) {
 | 
	
		
			
				|  |  | +static size_t divideRound8(size_t i) {
 | 
	
		
			
				|  |  |      return (i >> 3) + ((i & 7) != 0);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -24,27 +24,33 @@ int main(int argAmount, const char** args) {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return 0;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    int max = atoi(args[1]);
 | 
	
		
			
				|  |  | -    if(max <= 0) {
 | 
	
		
			
				|  |  | +    char* endP = NULL;
 | 
	
		
			
				|  |  | +    long maxRaw = strtol(args[1], &endP, 10);
 | 
	
		
			
				|  |  | +    if(maxRaw <= 0 || *args[1] == '\0' || *endP != '\0') {
 | 
	
		
			
				|  |  |          puts("max prime should be a positive number");
 | 
	
		
			
				|  |  |          return 0;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    size_t max = (size_t)maxRaw;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    int end = (max - 1) >> 1;
 | 
	
		
			
				|  |  | +    size_t end = (max - 1) >> 1;
 | 
	
		
			
				|  |  |      data = calloc(divideRound8(end), 1);
 | 
	
		
			
				|  |  | +    if(data == NULL) {
 | 
	
		
			
				|  |  | +        puts("failed allocation");
 | 
	
		
			
				|  |  | +        return 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      int found = 0;
 | 
	
		
			
				|  |  |      if(max >= 2) {
 | 
	
		
			
				|  |  |          puts("2");
 | 
	
		
			
				|  |  |          found++;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    for(int i = 0; i < end; i++) {
 | 
	
		
			
				|  |  | +    for(size_t i = 0; i < end; i++) {
 | 
	
		
			
				|  |  |          if(hasBit(i)) {
 | 
	
		
			
				|  |  | -            long prime = (i << 1) + 3;
 | 
	
		
			
				|  |  | -            for(long k = i + prime; k < end; k += prime) {
 | 
	
		
			
				|  |  | +            size_t prime = (i << 1) + 3;
 | 
	
		
			
				|  |  | +            for(size_t k = i + prime; k < end; k += prime) {
 | 
	
		
			
				|  |  |                  setBit(k);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            printf("%ld\n", prime);
 | 
	
		
			
				|  |  | +            printf("%zu\n", prime);
 | 
	
		
			
				|  |  |              found++;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -52,4 +58,4 @@ int main(int argAmount, const char** args) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      free(data);
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +}
 |