Lines Matching defs:sfdc

35 /* these bits are in sfdc->flags and must be outside VC_FLAGS	*/
229 static int putheader(Sfdc_t* sfdc)
231 static int putheader(sfdc)
232 Sfdc_t* sfdc;
239 if((sfdc->flags&VCSF_DONEHEAD) )
241 sfdc->flags |= VCSF_DONEHEAD;
244 if(sfdc->sfdt->type&VCSF_PLAIN)
248 if((sz = vcextract(sfdc->vc, (Void_t**)&code)) <= 0 )
249 return VCSFERROR(sfdc, "Transform data not encodable.");
250 if((4+1+vcsizeu(sz)+sz) > vciomore(sfdc->io))
251 return VCSFERROR(sfdc, "Transform data abnormally large.");
254 vcioputc(sfdc->io, VC_HEADER0);
255 vcioputc(sfdc->io, VC_HEADER1);
256 vcioputc(sfdc->io, VC_HEADER2);
257 vcioputc(sfdc->io, (sfdc->sfdt->type&VCSF_VCDIFF) ? 0 : VC_HEADER3);
260 vcioputc(sfdc->io, 0);
263 if(!(sfdc->sfdt->type&VCSF_VCDIFF) )
264 { vcioputu(sfdc->io, sz);
265 vcioputs(sfdc->io, code, sz);
272 static int makebuf(Sfdc_t* sfdc, ssize_t size)
274 static int makebuf(sfdc, size)
275 Sfdc_t* sfdc;
282 if(sfdc->bssz >= size)
285 oldbase = sfdc->base;
289 memcpy(base, oldbase, sfdc->endb - oldbase);
290 sfdc->endb = base + (sfdc->endb - oldbase);
291 sfdc->code = base + (sfdc->code - oldbase);
292 sfdc->base = base;
293 sfdc->bssz = size;
300 static ssize_t fillbuf(Sfdc_t* sfdc, Sfio_t* f, Sfdisc_t* disc)
302 static ssize_t fillbuf(sfdc, f, disc)
303 Sfdc_t* sfdc;
310 if((sz = sfdc->endb - sfdc->code) <= 0 )
311 { sfdc->endb = sfdc->code = sfdc->base;
314 else if(sfdc->code > sfdc->base)
315 { memcpy(sfdc->base, sfdc->code, sz);
316 sfdc->endb = (sfdc->code = sfdc->base) + sz;
318 for(; sz < sfdc->bssz; sz += n, sfdc->endb += n)
320 n = sfread(f, sfdc->endb, sfdc->bssz-sz);
321 else n = sfrd(f, sfdc->endb, sfdc->bssz-sz, disc);
356 static ssize_t ident(Sfdc_t* sfdc, Void_t* data, size_t dtsz)
358 static ssize_t ident(sfdc, data, dtsz)
359 Sfdc_t* sfdc;
419 sfdc->sfdt->trans = buf;
424 static ssize_t getheader(Sfdc_t* sfdc, Sfio_t* f, int init, int identify)
426 static ssize_t getheader(sfdc, f, init, identify)
427 Sfdc_t* sfdc;
451 if(loop > 0 && (sfdc->endb - sfdc->base) >= sfdc->bssz &&
452 makebuf(sfdc, sfdc->bssz+VCSF_BUFMIN) < 0)
453 return VCSFERROR(sfdc, "Failure in allocating memory");
456 sz = sfdc->endb - sfdc->code;
458 { if(fillbuf(sfdc, f, sfdc->vc ? &sfdc->disc : NIL(Sfdisc_t*)) <= 0 ||
459 (sz = sfdc->endb - sfdc->code) <= 0 )
460 return identify ? 0 : init ? VCSFERROR(sfdc, "Bad header data") : -1;
463 vcioinit(&io, sfdc->code, sz);
473 return identify ? 0 : VCSFERROR(sfdc, "Unknown header data");
483 return VCSFERROR(sfdc, "Corrupted Vcdiff header data");
492 return VCSFERROR(sfdc, "Corrupted Vcodex header data");
504 sfdc->code = vcionext(&io);
508 return identify ? 0 : VCSFERROR(sfdc, "Failure in obtaining header data");
510 return ident(sfdc, code, cdsz);
512 { if(sfdc->vc)
513 vcclose(sfdc->vc);
514 if(!(sfdc->vc = vcrestore(code, cdsz)) )
515 return VCSFERROR(sfdc, "Failure in initializing data transforms");
516 else if(sfdc->sfdt->type & VCSF_TRANS)
517 return ident(sfdc, code, cdsz);
523 static ssize_t encode(Sfdc_t* sfdc, Vcchar_t* data, size_t dtsz)
525 static ssize_t encode(sfdc, data, dtsz)
526 Sfdc_t* sfdc;
537 vcioinit(&io, sfdc->base, sfdc->bssz);
538 sfdc->io = &io;
540 if(!(sfdc->flags&VCSF_DONEHEAD) && putheader(sfdc) < 0)
541 return VCSFERROR(sfdc, "Failure in encoding transforms");
543 sfdc->code = NIL(Vcchar_t*); sfdc->cdsz = 0;
548 sfdc->vcdc.data = NIL(Void_t*);
549 sfdc->vcdc.size = 0;
553 if(sfdc->vcw)
554 wm = vcwapply(sfdc->vcw, dt, dosz, sfdc->pos);
558 { sfdc->vcdc.data = wm->wdata;
559 sfdc->vcdc.size = wm->wsize;
564 /**/ DEBUG_PRINT(2,"dtpos=%d ", sfdc->pos);
570 if(sfdc->vcw) /* set window data */
571 vcdisc(sfdc->vc, &sfdc->vcdc);
573 vcbuffer(sfdc->vc, NIL(Vcchar_t*), -1, -1); /* free buffers */
574 if((cdsz = vcapply(sfdc->vc, dt, dosz, &code)) <= 0 ||
575 (sz = vcundone(sfdc->vc)) >= dosz )
577 VCSFERROR(sfdc, "Error in transforming data");
584 if(sfdc->vcw) /* tell window matcher compressed result */
585 vcwfeedback(sfdc->vcw, cdsz);
599 memcpy(base, sfdc->base, vciosize(&io));
600 if(sfdc->base)
601 free(sfdc->base);
602 sfdc->base = base;
603 sfdc->bssz = bssz;
605 vcioinit(&io, sfdc->base, sfdc->bssz);
610 sfdc->pos += dosz; /* advance by amount consumed */
618 { if(data == sfdc->data) /* shift undone data */
620 sfdc->next = data + dosz;
627 sfdc->code = sfdc->base; sfdc->cdsz = vciosize(&io);
649 Sfdc_t *sfdc = (Sfdc_t*)disc;
651 if(!(sfdc->flags&VC_DECODE) )
652 return VCSFERROR(sfdc, "Handle not created for decoding data");
656 if((r = sfdc->endd - sfdc->next) > 0 )
658 memcpy(dt, sfdc->next, r);
659 sfdc->next += r;
663 if((d = (sfdc->endb - sfdc->code)) < 2*sizeof(size_t))
664 { if(fillbuf(sfdc, f, disc) <= 0 )
666 d = sfdc->endb - sfdc->code;
669 vcioinit(&io, sfdc->code, d);
671 sfdc->vcdc.data = NIL(Void_t*);
672 sfdc->vcdc.size = 0;
682 { if(!sfdc->vcw ||
685 !(wm = vcwapply(sfdc->vcw, TYPECAST(Void_t*, ctrl), d, pos)) )
686 { VCSFERROR(sfdc, "Error in obtaining source window data while decoding");
689 sfdc->vcdc.data = wm->wdata;
690 sfdc->vcdc.size = wm->wsize;
693 { sfdc->code = vcionext(&io);
694 if(vciomore(&io) > 0 && *sfdc->code == VC_EOF)
696 if(getheader(sfdc, f, 0, 0) < 0 )
701 { VCSFERROR(sfdc, "Data stream appeared to be corrupted");
705 if(sfdc->vcw)
706 vcdisc(sfdc->vc, &sfdc->vcdc);
710 { VCSFERROR(sfdc, "Error in getting size of coded data");
715 if((vcionext(&io) + d) > sfdc->endb)
716 { sfdc->code = vcionext(&io);
717 if((m = d+VCSF_SLACK) > sfdc->bssz &&
718 makebuf(sfdc, m) < 0 )
719 return VCSFERROR(sfdc, "Failure to allocate buffer");
720 if(fillbuf(sfdc, f, disc) <= 0 ||
721 (m = sfdc->endb - sfdc->code) < d )
722 return VCSFERROR(sfdc, "Failure to read coded data");
723 vcioinit(&io, sfdc->code, m);
727 sfdc->code = vcionext(&io);
729 { text = sfdc->code;
733 { vcbuffer(sfdc->vc, NIL(Vcchar_t*), -1, -1);
734 if((m = vcapply(sfdc->vc, sfdc->code, d, &text)) <= 0)
735 { VCSFERROR(sfdc, "Failure in decoding data");
740 sfdc->code += d; /* advance passed processed data */
743 sfdc->data = sfdc->next = text;
744 sfdc->endd = text+m;
745 sfdc->dtsz = m;
764 Sfdc_t *sfdc = (Sfdc_t*)disc;
766 if(!(sfdc->flags & VC_ENCODE) )
767 return VCSFERROR(sfdc, "Handle was not created to encode data");
770 { if(buf == (Void_t*)sfdc->data)
772 w = sfdc->next - sfdc->data;
773 sfdc->next = sfdc->data;
775 if((w = encode(sfdc, sfdc->data, w)) < 0 )
776 { VCSFERROR(sfdc, "Error encoding data");
781 if(sfwr(f, sfdc->code, sfdc->cdsz, disc) != sfdc->cdsz)
782 { VCSFERROR(sfdc, "Error writing encoded data");
786 if(sfdc->next > sfdc->data) /* not done yet */
793 if((w = sfdc->endd - sfdc->next) == 0)
795 sfdc->next = sfdc->data;
796 if((w = encode(sfdc, sfdc->data, sfdc->dtsz)) < 0)
797 { VCSFERROR(sfdc, "Error in encoding data");
800 if(sfwr(f, sfdc->code, sfdc->cdsz, disc) != sfdc->cdsz)
801 { VCSFERROR(sfdc, "Error in writing encoded data");
805 w = sfdc->endd - sfdc->next; /* bufferable space */
809 if(w == sfdc->dtsz && (n-sz) >= w)
810 { if((w = encode(sfdc, dt, n-sz)) < 0)
811 { VCSFERROR(sfdc, "Error in encoding");
814 if(sfwr(f, sfdc->code, sfdc->cdsz, disc) != sfdc->cdsz)
815 { VCSFERROR(sfdc, "Error in writing data");
821 memcpy(sfdc->next, dt, w);
822 sfdc->next += w;
855 Sfdc_t *sfdc = (Sfdc_t*)disc;
861 *((Sfdc_t**)data) = sfdc;
867 if(sfdc->flags & VC_ENCODE)
868 { if((sz = sfdc->next - sfdc->data) > 0 )
872 if(sfwr(f, sfdc->data, sz, disc) != sz)
873 return VCSFERROR(sfdc, "Error in writing coded data");
877 if(vcsfdcwrite(f, sfdc->data, sz, disc) != sz)
878 return VCSFERROR(sfdc, "Error in writing coded data");
880 sfdc->next = sfdc->data;
887 sfdc->flags |= VCSF_KEEPSFDC;
889 sfdc->flags &= ~VCSF_KEEPSFDC;
891 vcioinit(&io, sfdc->base, sfdc->bssz);
892 if(!(sfdc->flags&VCSF_DONEHEAD))
893 { sfdc->io = &io;
894 if(putheader(sfdc) < 0 )
895 return VCSFERROR(sfdc, "Error writing header");
898 if(!(sfdc->sfdt->type&VCSF_PLAIN) )
902 if(sz > 0 && sfwr(f, sfdc->base, sz, NIL(Sfdisc_t*)) != sz)
903 return VCSFERROR(sfdc, "Error in writing coded data");
907 if(!(sfdc->flags&VCSF_KEEPSFDC) && (type == SF_CLOSING || type == SF_DPOP) )
908 { if(sfdc->vc)
909 vcclose(sfdc->vc);
910 if(sfdc->vcwdc.srcf)
911 sfclose(sfdc->vcwdc.srcf);
912 if(sfdc->vcwdc.tarf)
913 sfclose(sfdc->vcwdc.tarf);
914 if(sfdc->vcw )
915 vcwclose(sfdc->vcw);
916 if((sfdc->flags&VC_ENCODE) && sfdc->data)
917 free(sfdc->data);
918 if(sfdc->base)
919 free(sfdc->base);
920 if(sfdc->sfdt->type&VCSF_FREE)
921 free(sfdc->sfdt);
922 free(sfdc);
978 Sfdc_t *sfdc = NIL(Sfdc_t*);
1000 if(!(sfdc = (Sfdc_t*)calloc(1,sizeof(Sfdc_t) + (sfdt == &dflt ? sizeof(dflt) : 0))) )
1007 sfdc->disc.readf = vcsfdcread;
1008 sfdc->disc.writef = vcsfdcwrite;
1009 sfdc->disc.seekf = vcsfdcseek;
1010 sfdc->disc.exceptf = vcsfdcexcept;
1013 sfdc->sf = sf; /* stream to do IO on */
1015 { sfdt = (Vcsfdata_t*)(sfdc + 1);
1018 sfdc->sfdt = sfdt; /* init parameters */
1022 if((sfdc->flags = type) == VC_ENCODE)
1024 if(!trans || !(sfdc->vc = vcmake(trans, VC_ENCODE)) )
1028 if((sfdc->vc->meth->type & VC_MTSOURCE) && sfdt->source)
1029 { if(!(sfdc->vcwdc.srcf = sfopen(0,sfdt->source,"rb")) )
1031 sfdc->vcw = vcwopen(&sfdc->vcwdc, wmeth);
1032 if(!sfdc->vcw)
1037 sfdc->dtsz = wsize > 0 ? wsize :
1038 sfdc->vc->meth->window > 0 ? sfdc->vc->meth->window : VCSF_WSIZE;
1039 if(!(sfdc->data = (Vcchar_t*)malloc(sfdc->dtsz)) )
1041 sfdc->next = sfdc->data;
1042 sfdc->endd = sfdc->data + sfdc->dtsz;
1045 sfdc->bssz = VCSFDTSZ(sfdc->dtsz);
1046 if(!(sfdc->base = (Vcchar_t*)malloc(sfdc->bssz)) )
1051 if((sfdc->bssz = wsize) <= 0)
1052 sfdc->bssz = VCSF_BUFSIZE;
1053 else if(sfdc->bssz < VCSF_BUFMIN)
1054 sfdc->bssz = VCSF_BUFMIN;
1055 if(!(sfdc->base = (Vcchar_t*)malloc(sfdc->bssz)) )
1060 sfdc->code = sfdc->endb = sfdc->base;
1066 if(!(sfdc->vc = vcmake(trans, VC_DECODE)) )
1072 if(getheader(sfdc, sf, 1, !type) < 0 )
1081 free(sfdc->base);
1082 free(sfdc);
1089 if((sfdc->vc->meth->type & VC_MTSOURCE) && sfdt->source)
1090 { if(!(sfdc->vcwdc.srcf = sfopen(0,sfdt->source,"rb")) )
1092 if(!(sfdc->vcw = vcwopen(&sfdc->vcwdc, NIL(Vcwmethod_t*))) )
1097 if(sfdisc(sf, &sfdc->disc) != &sfdc->disc)
1105 return (Vcsfio_t*)sfdc;
1109 if(sfdc)
1110 { if(sfdc->vc)
1111 vcclose(sfdc->vc);
1112 if(sfdc->vcwdc.srcf)
1113 sfclose(sfdc->vcwdc.srcf);
1114 if(sfdc->vcwdc.tarf)
1115 sfclose(sfdc->vcwdc.tarf);
1116 if(sfdc->vcw)
1117 vcwclose(sfdc->vcw);
1118 if((sfdc->flags&VC_ENCODE) && sfdc->data)
1119 free(sfdc->data);
1120 if(sfdc->base)
1121 free(sfdc->base);
1122 free(sfdc);