Committer:
FrankWeissenborn
Date:
Sun Jan 30 21:33:12 2011 +0000
Revision:
7:f652d1e054e9
Parent:
2:0e9a10f2b8c5
Added: GetPath Problem: Memory leak (after 5-6 tune in)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FrankWeissenborn 0:d9d38ebc0f69 1 #include "FileDownloader.h"
FrankWeissenborn 0:d9d38ebc0f69 2 #include "SDFileSystem.h"
FrankWeissenborn 0:d9d38ebc0f69 3
FrankWeissenborn 1:1b5ed0fa82f0 4 extern SDFileSystem sd;
FrankWeissenborn 0:d9d38ebc0f69 5 HTTPResult result;
FrankWeissenborn 0:d9d38ebc0f69 6 bool completed = false;
FrankWeissenborn 0:d9d38ebc0f69 7 HTTPClient http;
FrankWeissenborn 0:d9d38ebc0f69 8 HTTPStream stream;
FrankWeissenborn 0:d9d38ebc0f69 9
FrankWeissenborn 2:0e9a10f2b8c5 10
FrankWeissenborn 0:d9d38ebc0f69 11 void request_callback(HTTPResult r) {
FrankWeissenborn 0:d9d38ebc0f69 12 result = r;
FrankWeissenborn 0:d9d38ebc0f69 13 completed = true;
FrankWeissenborn 0:d9d38ebc0f69 14 }
FrankWeissenborn 0:d9d38ebc0f69 15
FrankWeissenborn 2:0e9a10f2b8c5 16 HTTPResult GetFile(const char *uri, const char *filename, FILE *fp, char * buffer, int buffer_size)
FrankWeissenborn 0:d9d38ebc0f69 17 {
FrankWeissenborn 0:d9d38ebc0f69 18
FrankWeissenborn 2:0e9a10f2b8c5 19 completed = false;
FrankWeissenborn 2:0e9a10f2b8c5 20
FrankWeissenborn 0:d9d38ebc0f69 21 fp = fopen(filename, "w");
FrankWeissenborn 0:d9d38ebc0f69 22 if(fp == NULL) {
FrankWeissenborn 0:d9d38ebc0f69 23 error("Could not open file for write\n");
FrankWeissenborn 0:d9d38ebc0f69 24 }
FrankWeissenborn 0:d9d38ebc0f69 25 else {
FrankWeissenborn 2:0e9a10f2b8c5 26 printf("Opened file\r\n");
FrankWeissenborn 0:d9d38ebc0f69 27 }
FrankWeissenborn 0:d9d38ebc0f69 28
FrankWeissenborn 0:d9d38ebc0f69 29
FrankWeissenborn 2:0e9a10f2b8c5 30 buffer[buffer_size-1] = 0x00;
FrankWeissenborn 2:0e9a10f2b8c5 31 stream.readNext((byte*)buffer, buffer_size-2); //Point to buffer for the first read
FrankWeissenborn 0:d9d38ebc0f69 32 HTTPResult r = http.get(uri, &stream, request_callback);
FrankWeissenborn 0:d9d38ebc0f69 33
FrankWeissenborn 0:d9d38ebc0f69 34 while (!completed) {
FrankWeissenborn 0:d9d38ebc0f69 35 Net::poll(); //Polls the Networking stack
FrankWeissenborn 0:d9d38ebc0f69 36 if (stream.readable()) {
FrankWeissenborn 2:0e9a10f2b8c5 37 buffer[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string
FrankWeissenborn 0:d9d38ebc0f69 38
FrankWeissenborn 0:d9d38ebc0f69 39 int p=0;
FrankWeissenborn 2:0e9a10f2b8c5 40 while (buffer[p] != 0)
FrankWeissenborn 0:d9d38ebc0f69 41 {
FrankWeissenborn 2:0e9a10f2b8c5 42 fprintf(fp,"%c",buffer[p]);
FrankWeissenborn 0:d9d38ebc0f69 43 p++;
FrankWeissenborn 0:d9d38ebc0f69 44 }
FrankWeissenborn 2:0e9a10f2b8c5 45 stream.readNext((byte*)buffer, buffer_size-2); //Buffer has been read, now we can put more data in it
FrankWeissenborn 0:d9d38ebc0f69 46 }
FrankWeissenborn 0:d9d38ebc0f69 47 }
FrankWeissenborn 0:d9d38ebc0f69 48
FrankWeissenborn 0:d9d38ebc0f69 49 fclose(fp);
FrankWeissenborn 2:0e9a10f2b8c5 50
FrankWeissenborn 0:d9d38ebc0f69 51 return result;
FrankWeissenborn 0:d9d38ebc0f69 52 }