diff options
| author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2013-01-01 11:04:21 +0100 |
|---|---|---|
| committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2013-01-01 15:06:41 +0100 |
| commit | b63d429c8f2c68994600d98bfaddf59ca16fc889 (patch) | |
| tree | 6cd4d216f57f28d95faf96a913188646f5527909 | |
| parent | 45cda1fdcc963db4824224af362de780e0d29097 (diff) | |
| download | rockbox-b63d429c8f2c68994600d98bfaddf59ca16fc889.zip rockbox-b63d429c8f2c68994600d98bfaddf59ca16fc889.tar.gz rockbox-b63d429c8f2c68994600d98bfaddf59ca16fc889.tar.bz2 rockbox-b63d429c8f2c68994600d98bfaddf59ca16fc889.tar.xz | |
Provide dealloc function to ipodpatcher.
On Windows the sector buffer is allocated using VirtualAlloc, thus releasing
this buffer should be done using VirtualFree. Provide an additional function
for deallocating the buffer so users of ipodpatcher do not need to know about
this.
Change-Id: Ibb0fc575a185148a389e63935e86a392bf8d180d
| -rw-r--r-- | rbutil/ipodpatcher/ipodio-posix.c | 10 | ||||
| -rw-r--r-- | rbutil/ipodpatcher/ipodio-win32.c | 13 | ||||
| -rw-r--r-- | rbutil/ipodpatcher/ipodio.h | 1 | ||||
| -rw-r--r-- | rbutil/ipodpatcher/main.c | 1 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/autodetection.cpp | 3 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/bootloaderinstallipod.cpp | 3 |
6 files changed, 27 insertions, 4 deletions
diff --git a/rbutil/ipodpatcher/ipodio-posix.c b/rbutil/ipodpatcher/ipodio-posix.c index 3775109..59cbc01 100644 --- a/rbutil/ipodpatcher/ipodio-posix.c +++ b/rbutil/ipodpatcher/ipodio-posix.c @@ -367,6 +367,16 @@ int ipod_alloc_buffer(struct ipod_t* ipod, int bufsize) return 0; } +int ipod_dealloc_buffer(struct ipod_t* ipod) +{ + if (ipod->sectorbuf == NULL) { + return -1; + } + free(ipod->sectorbuf); + ipod->sectorbuf = NULL; + return 0; +} + int ipod_seek(struct ipod_t* ipod, unsigned long pos) { off_t res; diff --git a/rbutil/ipodpatcher/ipodio-win32.c b/rbutil/ipodpatcher/ipodio-win32.c index d4bdbf0..cea2187 100644 --- a/rbutil/ipodpatcher/ipodio-win32.c +++ b/rbutil/ipodpatcher/ipodio-win32.c @@ -170,6 +170,19 @@ int ipod_alloc_buffer(struct ipod_t* ipod, int bufsize) return 0; } +int ipod_dealloc_buffer(struct ipod_t* ipod) +{ + if (ipod->sectorbuf == NULL) { + return -1; + } + if(!VirtualFree(ipod->sectorbuf, 0, MEM_RELEASE)) { + ipod_print_error(" Error releasing buffer "); + return -1; + } + ipod->sectorbuf = NULL; + return 0; +} + int ipod_seek(struct ipod_t* ipod, unsigned long pos) { if (SetFilePointer(ipod->dh, pos, NULL, FILE_BEGIN)==0xffffffff) { diff --git a/rbutil/ipodpatcher/ipodio.h b/rbutil/ipodpatcher/ipodio.h index 8a2f06c..4f1a35d 100644 --- a/rbutil/ipodpatcher/ipodio.h +++ b/rbutil/ipodpatcher/ipodio.h @@ -107,6 +107,7 @@ int ipod_scsi_inquiry(struct ipod_t* ipod, int page_code, ssize_t ipod_read(struct ipod_t* ipod, int nbytes); ssize_t ipod_write(struct ipod_t* ipod, int nbytes); int ipod_alloc_buffer(struct ipod_t* ipod, int bufsize); +int ipod_dealloc_buffer(struct ipod_t* ipod); /* In fat32format.c */ int format_partition(struct ipod_t* ipod, int partition); diff --git a/rbutil/ipodpatcher/main.c b/rbutil/ipodpatcher/main.c index 12c38de..e82fbf5 100644 --- a/rbutil/ipodpatcher/main.c +++ b/rbutil/ipodpatcher/main.c @@ -614,5 +614,6 @@ int main(int argc, char* argv[]) } #endif + ipod_dealloc_buffer(&ipod); return 0; } diff --git a/rbutil/rbutilqt/base/autodetection.cpp b/rbutil/rbutilqt/base/autodetection.cpp index a453fa8..e57c454 100644 --- a/rbutil/rbutilqt/base/autodetection.cpp +++ b/rbutil/rbutilqt/base/autodetection.cpp @@ -162,8 +162,7 @@ bool Autodetection::detect() else { qDebug() << "[Autodetect] ipodpatcher: no Ipod found." << n; } - free(ipod.sectorbuf); - ipod.sectorbuf = NULL; + ipod_dealloc_buffer(&ipod); // try sansapatcher // initialize sector buffer. Needed. diff --git a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp index 3d90663..de7aaa8 100644 --- a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp +++ b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp @@ -37,8 +37,7 @@ BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) BootloaderInstallIpod::~BootloaderInstallIpod() { if(ipod.sectorbuf) { - free(ipod.sectorbuf); - ipod.sectorbuf = NULL; + ipod_dealloc_buffer(&ipod); } } |