int afd_del_seg(AFFILE *af,const char *segname) { AFFILE *af2 = afd_file_with_seg(af,segname); if(af2){ return af_del_seg(af2,segname); } return -1; // not found }
int sequential_test() { char buf[1024]; const char *fmt = "this is line %d\n"; printf("Sequential test...\n"); AFFILE *af = open_testfile("test_sequential",1); for(int i=0;i<MAX_FMTS;i++){ if(i%250==0) printf("\rwriting %d/%d...",i,MAX_FMTS); sprintf(buf,fmt,i); if(af_write(af,(unsigned char *)buf,strlen(buf))!=(int)strlen(buf)){ err(1,"Attempt to write buffer %d failed\n",i); } } /* Test for a random bug that was reported */ af_update_seg(af,"test",0,(const u_char *)"foo",3); af_update_seg(af,"test",0,(const u_char *)"bar",3); af_del_seg(af,"test"); af_del_seg(af,"test"); af_close(af); printf("\nSequential file written.\n"); printf("\n"); printf("Now verifying the string...\n"); af = open_testfile("test_sequential",0); if(!af) err(1,"af_open"); for(int i=0;i<MAX_FMTS;i++){ char rbuf[1024]; sprintf(buf,fmt,i); int len = strlen(buf); if(af_read(af,(unsigned char *)rbuf,len)!=len){ err(1,"Attempt to read entry %d failed\n",i); } rbuf[len] = 0; // terminate the string if(strcmp(buf,rbuf)!=0){ err(1,"Attempt to verify entry %d failed.\nExpected: (len=%zd) '%s'\nGot: (len=%zd) '%s'\n", i,strlen(buf),buf,strlen(rbuf),rbuf); } } af_close(af); printf("===========================\n\n"); return 0; }
/* * afm_del_seg: * If it is a page segment, generate an error. * otherwise from the aff file. */ static int afm_del_seg(AFFILE *af,const char *segname) { struct afm_private *ap = AFM_PRIVATE(af); int64_t page_num = af_segname_page_number(segname); if(page_num>=0){ errno = ENOTSUP; return -1; } return af_del_seg(ap->aff,segname); }