int main() { static stralloc sa; stralloc_copys(&sa,"foo\r\n"); assert(sa.len==5); assert(stralloc_chomp(&sa)==2); assert(stralloc_chop(&sa)=='o'); assert(stralloc_chop(&sa)=='o'); assert(stralloc_chop(&sa)=='f'); assert(stralloc_chop(&sa)==-1); return 0; }
int main(int argc, char* argv[]) { int index = 0, c; static const struct longopt opts[] = {{"help", 0, NULL, 'h'}, {"verbose", 0, 0, 'v'}, {0}}; errmsg_iam(argv[0]); for(;;) { c = getopt_long(argc, argv, "hv", opts, &index); if(c == -1) break; if(c == '\0') continue; switch(c) { case 'h': usage(argv[0]); return 0; case 'v': verbose = 1; break; default: { usage(argv[0]); return 1; } } } while(optind < argc) { const char* a = argv[optind++]; int i = str_rchr(a, '.'); if(str_equal(&a[i], ".list")) { buffer in; if(!buffer_mmapread(&in, a)) { stralloc target, link; ssize_t ret; stralloc_init(&target); stralloc_init(&link); for(;;) { if((ret = buffer_get_new_token_sa(&in, &target, " \t\v", 2)) < 0) break; if(ret == 0 || target.s[0] == '\0') break; if(target.len > 0) --target.len; if((ret = buffer_get_new_token_sa(&in, &link, "\r\n", 2)) < 0) break; if(ret == 0 || link.s[0] == '\0') break; stralloc_chomp(&link); mklink_sa(&target, &link); if(!stralloc_endb(&link, ".so", 3)) { if(sln(link.s)) return 1; } } buffer_close(&in); } } else { if(sln(argv[i])) return 1; } } }