1 // Larbin
2 // Sebastien Ailleret
3 // 10-12-01 -> 10-12-01
4 
5 // use dynamic buffers when downloading specific pages
6 
initSpecific()7 void initSpecific () { }
8 
9 #define newSpec() ((void) 0)
10 #define endOfInput() 0
11 
pipeSpec()12 bool html::pipeSpec () {
13   if (dynbuf == NULL) {
14     if (pos > nearlyFullPage) {
15       // need a dyn buf (big file)
16       szDyn = 2*maxPageSize;
17       dynbuf = new char[szDyn];
18       nbSpec = buffer + pos - posParse;
19       memcpy(dynbuf, posParse, nbSpec);
20       dynbuf[nbSpec] = 0;
21       pos = posParse - buffer;
22     }
23     return false;
24   } else {
25     int nb = buffer + pos - posParse;
26     int newnb = nbSpec + nb;
27     if (newnb >= maxSpecSize) {
28       errno = tooBig;
29       return true;
30     }
31     if (newnb >= szDyn) {
32       // resize buffer
33       szDyn *= 2;
34       char *tmp = new char[szDyn];
35       memcpy(tmp, dynbuf, nbSpec);
36       delete[] dynbuf;
37       dynbuf = tmp;
38     }
39     memcpy(dynbuf+nbSpec, posParse, nb);
40     nbSpec = newnb;
41     dynbuf[nbSpec] = 0;
42     pos = posParse - buffer;
43     return false;
44   }
45 }
46 
getContent()47 char * html::getContent() {
48   if (dynbuf != NULL)
49     return dynbuf;
50   else
51     return contentStart;
52 }
53 
getSize()54 int html::getSize() {
55   if (dynbuf != NULL) {
56     return nbSpec;
57   } else {
58     return (buffer + pos - contentStart);
59   }
60 }
61 
62 #define constrSpec() dynbuf = NULL
63 
64 #define destructSpec() if (dynbuf != NULL) { delete[] dynbuf; }
65