Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This code shows how to read a zipfile included in an app's binary.
  3.  *
  4.  * License: this code is public domain. I make no warranty that it is useful,
  5.  *  correct, harmless, or environmentally safe.
  6.  *
  7.  * This particular file may be used however you like, including copying it
  8.  *  verbatim into a closed-source project, exploiting it commercially, and
  9.  *  removing any trace of my name from the source (although I hope you won't
  10.  *  do that). I welcome enhancements and corrections to this file, but I do
  11.  *  not require you to send me patches if you make changes. This code has
  12.  *  NO WARRANTY.
  13.  *
  14.  * Unless otherwise stated, the rest of PhysicsFS falls under the zlib license.
  15.  *  Please see LICENSE.txt in the root of the source tree.
  16.  *
  17.  *  This file was written by Ryan C. Gordon. (icculus@icculus.org).
  18.  */
  19.  
  20. /*
  21.  * Compile this program and then attach a .zip file to the end of the
  22.  *  compiled binary.
  23.  *
  24.  * On Linux, something like this will build the final binary:
  25.  *   gcc -o selfextract.tmp selfextract.c -lphysfs && \
  26.  *   cat selfextract.tmp myzipfile.zip >> selfextract && \
  27.  *   chmod a+x selfextract && \
  28.  *   rm -f selfextract.tmp
  29.  *
  30.  * This may not work on all platforms, and it probably only works with
  31.  *  .zip files, since they are designed to be appended to another file.
  32.  */
  33.  
  34. #include <stdio.h>
  35. #include "physfs.h"
  36.  
  37. int main(int argc, char **argv)
  38. {
  39.     int rc = 0;
  40.  
  41.     if (!PHYSFS_init(argv[0]))
  42.     {
  43.         printf("PHYSFS_init() failed: %s\n", PHYSFS_getLastError());
  44.         return 42;
  45.     } /* if */
  46.  
  47.     rc = PHYSFS_addToSearchPath(argv[0], 0);
  48.     if (!rc)
  49.     {
  50.         printf("Couldn't find self-extract data: %s\n", PHYSFS_getLastError());
  51.         printf("This might mean you didn't append a zipfile to the binary.\n");
  52.         return 42;
  53.     } /* if */
  54.  
  55.     char **files = PHYSFS_enumerateFiles("/");
  56.     char **i;
  57.     for (i = files; *i != NULL; i++)
  58.     {
  59.         const char *dirorfile = PHYSFS_isDirectory(*i) ? "Directory" : "File";
  60.         printf(" * %s '%s' is in root of attached data.\n", dirorfile, *i);
  61.     } /* for */
  62.     PHYSFS_freeList(files);
  63.  
  64.     return 0;
  65. } /* main */
  66.  
  67.