*
* This example requires libcurl 7.9.7 or later.
*/
-/* <DESC>
- * implements an fopen() abstraction allowing reading from URLs
- * </DESC>
- */
#include <stdio.h>
#include <string.h>
size=rembuff;
}
else {
- /* realloc succeeded increase buffer size*/
+ /* realloc suceeded increase buffer size*/
url->buffer_len+=size - rembuff;
url->buffer=newbuff;
}
CURLMcode mc; /* curl_multi_fdset() return code */
/* only attempt to fill buffer if transactions still running and buffer
- * doesn't exceed required size already
+ * doesnt exceed required size already
*/
if((!file->still_running) || (file->buffer_pos > want))
return 0;
}
/* use to remove want bytes from the front of a files buffer */
-static int use_buffer(URL_FILE *file, size_t want)
+static int use_buffer(URL_FILE *file,int want)
{
/* sort out buffer */
if((file->buffer_pos - want) <=0) {
/* ditch buffer - write will recreate */
- free(file->buffer);
+ if(file->buffer)
+ free(file->buffer);
+
file->buffer=NULL;
file->buffer_pos=0;
file->buffer_len=0;
URL_FILE *url_fopen(const char *url,const char *operation)
{
/* this code could check for URLs or types in the 'url' and
- basically use the real fopen() for standard files */
+ basicly use the real fopen() for standard files */
URL_FILE *file;
(void)operation;
break;
}
- free(file->buffer);/* free any allocated buffer space */
+ if(file->buffer)
+ free(file->buffer);/* free any allocated buffer space */
+
free(file);
return ret;
switch(file->type) {
case CFTYPE_FILE:
- ptr = fgets(ptr, (int)size, file->handle.file);
+ ptr = fgets(ptr,size,file->handle.file);
break;
case CFTYPE_CURL:
curl_multi_add_handle(multi_handle, file->handle.curl);
/* ditch buffer - write will recreate - resets stream pos*/
- free(file->buffer);
+ if(file->buffer)
+ free(file->buffer);
+
file->buffer=NULL;
file->buffer_pos=0;
file->buffer_len=0;
URL_FILE *handle;
FILE *outf;
- size_t nread;
+ int nread;
char buffer[256];
const char *url;
}
do {
- nread = url_fread(buffer, 1, sizeof(buffer), handle);
+ nread = url_fread(buffer, 1,sizeof(buffer), handle);
fwrite(buffer,1,nread,outf);
} while(nread);