====== C/C++ code snippets ====== * [[getopt]] * [[key-value pairs]] * [[timing]] * [[memmem]] - find substrings of raw memory (as opposed to null terminated strings) * [[Getting mixed C and assembler output]] #include #include #include #ifdef DEBUGMSG #define DEBUG printf #else #define DEBUG(...) #endif #define die(...) { fprintf(stderr, __VA_ARGS__); exit(1); } #define pdie(s) { perror(s); exit(1); } char parse_size(int64_t* v, char* s) { char suffix; if (sscanf(s,"%lld%c",v,&suffix)==2) { if (suffix=='k' || suffix=='K') (*v)*=1024; else if (suffix=='m' || suffix=='M') (*v)*=1024*1024; else if (suffix=='g' || suffix=='G') (*v)*=1024*1024*1024; else if (suffix=='t' || suffix=='T') (*v)*=(int64_t)(1024*1024)*(int64_t)(1024*1024); else return 0; return 1; } else if (sscanf(s,"%lld",v)==1) { return 1; } return 0; } char* tok; for (tok = strtok(value,","); tok ; tok = strtok(NULL,",")) { ... }