12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //
- // unzip test
- //
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include "../src/unzip.h"
- #include "bmp_icons.h"
- void * myOpen(const char *filename, int32_t *size) {
- printf("Attempting to open %s\n", filename);
- FILE *f;
- size_t filesize;
- f = fopen(filename,"r+b");
- if (f) {
- fseek(f, 0, SEEK_END);
- filesize = ftell(f);
- fseek(f, 0, SEEK_SET);
- *size = (int32_t) filesize;
- }
- return (void *)f;
- } /* myOpen() */
- void myClose(void *p) {
- ZIPFILE *pzf = (ZIPFILE *)p;
- if (pzf) fclose((FILE *)pzf->fHandle);
- } /* myClose() */
- int32_t myRead(void *p, uint8_t *buffer, int32_t length) {
- ZIPFILE *pzf = (ZIPFILE *)p;
- if (!pzf) return 0;
- return (int32_t)fread(buffer, 1, length, (FILE *)pzf->fHandle);
- } /* myRead() */
- int32_t mySeek(void *p, int32_t position, int type) {
- ZIPFILE *pzf = (ZIPFILE *)p;
- if (!pzf) return 0;
- return fseek((FILE *)pzf->fHandle, position, type);
- }
- int main(int argc, const char *argv[])
- {
- int rc, i;
- unzFile zHandle;
- char szTemp[1024];
- ZIPFILE zpf;
-
- if (argc != 3) // unzip <zip> <file to extract>
- {
- printf("Usage: unziptest <zip file> <file to unzip within the zip>\n");
- return 0;
- }
- printf("Starting unzip test...reading file %s from zip archive %s\n", argv[2], argv[1]);
- // zHandle = unzOpen(argv[1], NULL, 0, &zpf, myOpen, myRead, mySeek, myClose);
- zHandle = unzOpen(NULL, bmp_icons, sizeof(bmp_icons), &zpf, NULL, NULL, NULL, NULL);
- if (zHandle == NULL) {
- printf("Error opening file: %s\n", argv[1]);
- return -1;
- }
- // Display the global comment (if any)
- rc = unzGetGlobalComment(zHandle, (char *)szTemp, sizeof(szTemp));
- printf("Global Comment: %s\n", szTemp);
-
- // rc = unzLocateFile(zHandle, argv[2], 2);
- rc = unzLocateFile(zHandle, "key.bmp", 2);
- if (rc != UNZ_OK) /* Report the file not found */
- {
- printf("file %s not found within archive\n", argv[2]);
- unzClose(zHandle);
- return -1;
- }
- rc = unzOpenCurrentFile(zHandle); /* Try to open the file we want */
- if (rc != UNZ_OK) {
- printf("Error opening file = %d\n", rc);
- unzClose(zHandle);
- return -1;
- }
- printf("File located within archive.\n");
- rc = 1;
- i = 0;
- while (rc > 0) {
- rc = unzReadCurrentFile(zHandle, szTemp, sizeof(szTemp));
- if (rc >= 0) {
- i += rc;
- } else {
- printf("Error reading from file\n");
- break;
- }
- }
- printf("Total bytes read = %d\n", i);
- rc = unzCloseCurrentFile(zHandle);
- unzClose(zHandle);
- return 0;
- } /* main() */
|