Parsing for size with prefixes in C

At some point, I have decided to pass size of the log file created by stdroller.

I thought it will be hard as hell to pass SI prefixes. I was all wrong. It’s a piece of cake to parse the value with format like: ./stdroller --limit=10G or ./stdroller --limit=1k, etc.

All you have to do is to use strtoull function. It returns location of first character that is not a part of your positional system (I am using system with base 10). So, you get index of SI prefix for free. Isn’t that cool?

limit = strtoull( optarg, &next_idx, 10 );

if( *next_idx != '\0' ) {
  if( *(next_idx + 1) != '\0') {
    printf("Ups. You have passed incorrect number\n");
    exit(1);
  } else {
    switch( *next_idx ) {
      case 'K':
      case 'k': 
        limit *= pow(10,3);
        break;
      case 'M':
      case 'm':
        limit *= pow(10,6);
        break;
      // you can put additional cases here for G/g, T/t, P/p, etc.
      default:
        printf("Ups. Incorrect SI prefix\n");
        exit(1);
    } 
  }
}