more updates

master
leitner 10 years ago
parent 3d9452738b
commit 38ea25fd9f

@ -31,7 +31,7 @@ CFLAGS += -D_REENTRANT $(WERROR)
# startrip # startrip
ifneq ($(DEBUG),) ifneq ($(DEBUG),)
CFLAGS=-pipe -Wall -g CFLAGS=-pipe -Wall -g -Og
endif endif
path = $(subst :, ,$(PATH)) path = $(subst :, ,$(PATH))
diet_path = $(foreach dir,$(path),$(wildcard $(dir)/diet)) diet_path = $(foreach dir,$(path),$(wildcard $(dir)/diet))

@ -0,0 +1,40 @@
#include "fmt.h"
size_t fmt_xmlescape(char* dest,uint32_t ch) {
char* x;
size_t n;
/*
From http://en.wikipedia.org/wiki/XML#Valid_characters
Unicode code points in the following ranges are valid in XML 1.0 documents:
U+0009, U+000A, U+000D: these are the only C0 controls accepted in XML 1.0;
U+0020U+D7FF, U+E000U+FFFD: this excludes some (not all) non-characters in the BMP (all surrogates, U+FFFE and U+FFFF are forbidden);
U+10000U+10FFFF: this includes all code points in supplementary planes, including non-characters.
*/
if (ch==0 || (ch>=0xd780 && ch<=0xdfff) || ch==0xfffe || ch==0xffff || ch>0x10ffff) return 0;
if ((ch&0x7f)<20 && ch!=9 && ch!=0xa && ch!=0xd && ch!=0x85) {
char buf[6];
buf[0]='&';
buf[1]='#';
buf[2]='x';
n=3+fmt_xlong(buf+3,ch);
buf[n++]=';';
x=buf;
} else
switch (ch) {
case '&':
x="&amp;"; n=5;
break;
case '<':
x="&lt;"; n=4;
break;
default:
return fmt_utf8(dest,ch);
}
if (dest) {
size_t i;
for (i=0; i<n; ++i)
dest[i]=x[i];
}
return n;
}

@ -297,7 +297,7 @@ invalidpart:
if (!(tmp=strstr(line," end="))) goto invalidpart; if (!(tmp=strstr(line," end="))) goto invalidpart;
c=tmp[5+scan_ulong(tmp+5,&endoffset)]; c=tmp[5+scan_ulong(tmp+5,&endoffset)];
if (c!=' ' && c!=0) goto invalidpart; if (c!=' ' && c!=0) goto invalidpart;
--offset; --endoffset; if (offset>0) --offset; --endoffset;
if (endoffset<offset || endoffset>totalsize) goto invalidpart; if (endoffset<offset || endoffset>totalsize) goto invalidpart;
lseek(ofd,offset,SEEK_SET); lseek(ofd,offset,SEEK_SET);
continue; continue;
@ -315,13 +315,15 @@ invalidpart:
gotcrc=1; gotcrc=1;
} else if (part==1) { } else if (part==1) {
tmp=strstr(line," crc32="); tmp=strstr(line," crc32=");
if (!tmp) goto invalidpart; if (!tmp)
goto invalidpart;
if (!scan_xlong(tmp+7,&wantedcrc)) if (!scan_xlong(tmp+7,&wantedcrc))
goto invalidpart; goto invalidpart;
wantedcrc &= 0xfffffffful; wantedcrc &= 0xfffffffful;
gotcrc=1; gotcrc=1;
endoffset=totalsize; endoffset=totalsize;
} else goto invalidpart; } else
goto invalidpart;
stralloc_init(&out); stralloc_init(&out);
stralloc_0(&yencpart); stralloc_0(&yencpart);
stralloc_ready(&out,yencpart.len); stralloc_ready(&out,yencpart.len);

Loading…
Cancel
Save