- if(bufpos == sizeof(readbuf))
- bufpos = 0;
- ret = read(listfd, readbuf + bufpos, sizeof(readbuf) - bufpos);
- if(ret <= 0) {
- if(ret < 0)
- msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not read from public hub listing process: %s"), strerror(errno));
- else
+ }
+ if(state == 0) {
+ if(hc->rescode != 0) {
+ if(hc->rescode != 200) {
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("The hublist server returned an error: \"%i %s\""), hc->rescode, hc->resstr);
+ aborthublist();
+ return;
+ }
+ state = 1;
+ }
+ }
+ if(state == 1) {
+ if(hc->databufdata > 0) {
+ if(bzs == NULL) {
+ bufcat(mybuf, hc->databuf, hc->databufdata);
+ hc->databufdata = 0;
+ } else {
+ bzs->next_in = hc->databuf;
+ bzs->avail_in = hc->databufdata;
+ do {
+ sizebuf2(mybuf, mybufdata + 1024, 1);
+ bzs->next_out = mybuf + mybufdata;
+ bzs->avail_out = mybufsize - mybufdata;
+ bzret = BZ2_bzDecompress(bzs);
+ if((bzret != BZ_OK) && (bzret != BZ_STREAM_END)) {
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not decompress hublist (%i)"), hret);
+ aborthublist();
+ return;
+ }
+ mybufdata = mybufsize - bzs->avail_out;
+ if(bzret == BZ_STREAM_END) {
+ ret = 1;
+ break;
+ }
+ } while(bzs->avail_out == 0);
+ memmove(hc->databuf, bzs->next_in, hc->databufdata -= (bzs->next_in - hc->databuf));
+ }
+ if((hret = handler(PHO_DATA, mybuf, mybufdata)) < 0)
+ aborthublist();
+ else
+ memmove(mybuf, mybuf + hret, mybufdata -= hret);
+ }
+ if(ret) {