size_t getpidsize(pid_t pid) { char *buf; FILE *fp; char line[1024]; size_t size = 0; if (asprintf(&buf, "/proc/%d/status", pid) < 0) { perror("getpidsize:asprintf"); return 0; } fp = fopen(buf, "r"); if (!fp) { perror("getpidsize:fopen"); } while(fgets(line, sizeof(line) -1, fp)) { chomp(line); if (rx_match(line, "^VmSize:")) { char *tmp; tmp = split(line, " "); trim(tmp); printf("GOT: %s\n",tmp); size = atoi(tmp); break; } } fclose(fp); return size; }
int main(int argc,char **argv) { int fd; init(); path2abs=1; while(*(++argv)&&**argv=='-') { int i=1; for(;;) { switch(*(*argv+i)) { case '\0': goto END_OF_OPTIONS; case 'h': case '?': usage(); return 1; case 'n': path2abs=0; break; case 'v': version(); break; default: (*er_printf)("unknown option '-%c'\n",*(*argv+i)); break; } ++i; } END_OF_OPTIONS:; } if(!(*(argv)&&*(argv+1))) {usage(); return 1;} xml=*(argv++); if((wf=(fd=open(xml,O_RDONLY))!=-1)) close(fd); do { if(arx(*(argv++))) { int i; for(i=0;i!=i_r;++i) { switch(rules[i][0]) { case VALID: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd);} break; case INVAL: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd); ok=wf&&!ok;} break; case MATCH: ok=rx_match(string+rules[i][1],xml,strlen(xml)); break; case NOMAT: ok=!rx_match(string+rules[i][1],xml,strlen(xml)); break; default: assert(0); } if(ok) { printf("%s\n",string+rules[i][2]); return EXIT_SUCCESS; } } } clear(); } while(*argv); return EXIT_FAILURE; }
int str_set_rx_memberp (char **set, const char *regex) { if (set != (char **)0) { sexpr rx = rx_compile (regex); while (*set != (char *)0) { if (truep (rx_match (rx, *set))) { return ~0; } set++; } } return 0; }
int rx_like_at_loc (int for_match, const char *file, int line, const char *got, const char *expected, const char *fmt, ...) { va_list args; int test; Rx *rx = rx_new(expected); if (!rx) exit(255); test = rx_match(rx, got) ^ !for_match; rx_free(rx); va_start(args, fmt); vok_at_loc(file, line, test, fmt, args); va_end(args); if (!test) { diag(" %13s '%s'", "", got); diag(" %13s: '%s'", for_match ? "doesn't match" : "matches", expected); } return test; }
void xsd_test() { rx_init(); assert(toklenn("",0)==0); assert(toklenn("A",1)==1); assert(toklenn(" A ",4)==1); assert(toklenn(" A B ",7)==3); assert(tokcntn("",0)==0); assert(tokcntn("A",1)==1); assert(tokcntn("AB CD",5)==2); assert(tokcntn(" AB C ",9)==2); assert(diglenn(" +14.25",7)==4); assert(diglenn("1",1)==1); assert(diglenn("0",1)==1); assert(diglenn("+00.0",5)==1); assert(fdiglenn(".1",2)==1); assert(fdiglenn("+0.0140",7)==3); assert(fdiglenn("0",1)==0); assert(deccmp("0",1,"0.0",3)==0); assert(deccmp("1 ",2," 1",2)==0); assert(deccmp("0.",2,".0",2)==0); assert(deccmp("1",1,"1.0",3)==0); assert(deccmp("01.1",4,"1.10",4)==0); assert(deccmp("+1",2,"1.0",3)==0); assert(deccmp("+0.",3,"-0",2)==0); assert(deccmp("0",1,"0.1",3)<0); assert(deccmp("1.",2,".0",2)>0); assert(deccmp("+1",2,"-1",2)>0); assert(hexcmpn("","",0)==0); assert(hexcmpn("ABC123","ABC123",6)==0); assert(hexcmpn("aBCd","AbCd",4)==0); assert(hexcmpn("ABC 123"," ABC123",7)==0); assert(hexcmpn("ABC124","ABC123",6)>0); assert(rx_match(PAT_BASE64_BINARY,"",0)); assert(rx_match(PAT_BASE64_BINARY,"YmFz",4)); assert(rx_match(PAT_BASE64_BINARY,"YA==",4)); assert(rx_match(PAT_BASE64_BINARY,"Y w = =",7)); assert(rx_match(PAT_BASE64_BINARY,"YF8=",4)); assert(!rx_match(PAT_BASE64_BINARY,"YmF@",4)); assert(!rx_match(PAT_BASE64_BINARY,"YmFgH",5)); assert(!rx_match(PAT_BASE64_BINARY,"Y===",4)); assert(!rx_match(PAT_BASE64_BINARY,"YF=O",4)); assert(!rx_match(PAT_BASE64_BINARY,"YFZ=",4)); assert(b64cmpn("","",0)==0); assert(b64cmpn("ABC123","ABC123",6)==0); assert(b64cmpn("ABC 123"," ABC123",7)==0); assert(b64cmpn("ABC124","ABC123",6)>0); assert(b64cmpn("ABC123","abc123",6)<0); assert(nrmcmpn("A B","A B",3)==0); assert(nrmcmpn("A B","A C",3)<0); assert(nrmcmpn("A B","A\nB",3)==0); assert(nrmcmpn(" A","A ",2)<0); }