uz_zip.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /************************************************************************
  2. * NodeMCU zip wrapper code for uzlib_compress
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <stdint.h>
  7. #include <unistd.h>
  8. #include "uzlib.h"
  9. #define fwriterec(r) fwrite(&(r), sizeof(r), 1, fout);
  10. #define BAD_FILE (-1)
  11. int main (int argc, char **argv) {
  12. const char *in = argv[1], *out = argv[2];
  13. if (argc!=3)
  14. return 1;
  15. printf ("Compressing in=%s out=%s\n", in, out);
  16. FILE *fin, *fout;
  17. int status = -1;
  18. uint32_t iLen, oLen;
  19. uint8_t *iBuf, *oBuf;
  20. if (!(fin = fopen(in, "rb")) || fseek(fin, 0, SEEK_END) ||
  21. (iLen = ftell(fin)) <= 0 || fseek(fin, 0, SEEK_SET))
  22. return 1;
  23. if ((fout = fopen(out, "wb")) == NULL ||
  24. (iBuf = (uint8_t *) uz_malloc(iLen)) == NULL ||
  25. fread(iBuf, 1, iLen, fin) != iLen)
  26. return 1;
  27. if (uzlib_compress (&oBuf, &oLen, iBuf, iLen) == UZLIB_OK &&
  28. oLen == fwrite(oBuf, oLen, 1, fout))
  29. status = UZLIB_OK;
  30. uz_free(iBuf);
  31. if (oBuf) uz_free(oBuf);
  32. fclose(fin);
  33. fclose(fout);
  34. if (status == UZLIB_OK)
  35. unlink(out);
  36. return (status == UZLIB_OK) ? 1: 0;
  37. }