Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.   Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
  3.  
  4.   See the accompanying file LICENSE, version 2009-Jan-02 or later
  5.   (the contents of which are also included in unzip.h) for terms of use.
  6.   If, for some reason, all these files are missing, the Info-ZIP license
  7.   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
  8. */
  9. /*---------------------------------------------------------------------------
  10.  
  11.   unzipstb.c
  12.  
  13.   Simple stub function for UnZip DLL (or shared library, whatever); does
  14.   exactly the same thing as normal UnZip, except for additional printf()s
  15.   of various version numbers, solely as a demonstration of what can/should
  16.   be checked when using the DLL.  (If major version numbers ever differ,
  17.   assume program is incompatible with DLL--especially if DLL version is
  18.   older.  This is not likely to be a problem with *this* simple program,
  19.   but most user programs will be much more complex.)
  20.  
  21.   ---------------------------------------------------------------------------*/
  22.  
  23. #include <stdio.h>
  24. #include "unzip.h"
  25. #if defined(MODERN) && !defined(NO_STDDEF_H)
  26. # include <stddef.h>
  27. #endif
  28. #include "unzvers.h"
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32.     static ZCONST UzpVer *pVersion;     /* no pervert jokes, please... */
  33.  
  34.     pVersion = UzpVersion();
  35.  
  36.     printf("UnZip stub:  checking version numbers (DLL is dated %s)\n",
  37.       pVersion->date);
  38.     printf("   UnZip versions:    expecting %u.%u%u, using %u.%u%u%s\n",
  39.       UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, pVersion->unzip.major,
  40.       pVersion->unzip.minor, pVersion->unzip.patchlevel, pVersion->betalevel);
  41.     printf("   ZipInfo versions:  expecting %u.%u%u, using %u.%u%u\n",
  42.       ZI_MAJORVER, ZI_MINORVER, UZ_PATCHLEVEL, pVersion->zipinfo.major,
  43.       pVersion->zipinfo.minor, pVersion->zipinfo.patchlevel);
  44.  
  45. /*
  46.     D2_M*VER and os2dll.* are obsolete, though retained for compatibility:
  47.  
  48.     printf("   OS2 DLL versions:  expecting %u.%u%u, using %u.%u%u\n",
  49.       D2_MAJORVER, D2_MINORVER, D2_PATCHLEVEL, pVersion->os2dll.major,
  50.       pVersion->os2dll.minor, pVersion->os2dll.patchlevel);
  51.  */
  52.  
  53.     if (pVersion->flag & 2)
  54.         printf("   using zlib version %s\n", pVersion->zlib_version);
  55.  
  56.     /* This example code only uses the dll calls UzpVersion() and
  57.      * UzpMain().  The APIs for these two calls have maintained backward
  58.      * compatibility since at least the UnZip release 5.3 !
  59.      */
  60. #   define UZDLL_MINVERS_MAJOR          5
  61. #   define UZDLL_MINVERS_MINOR          3
  62. #   define UZDLL_MINVERS_PATCHLEVEL     0
  63.     /* This UnZip DLL stub requires a DLL version of at least: */
  64.     if ( (pVersion->unzip.major < UZDLL_MINVERS_MAJOR) ||
  65.          ((pVersion->unzip.major == UZDLL_MINVERS_MAJOR) &&
  66.           ((pVersion->unzip.minor < UZDLL_MINVERS_MINOR) ||
  67.            ((pVersion->unzip.minor == UZDLL_MINVERS_MINOR) &&
  68.             (pVersion->unzip.patchlevel < UZDLL_MINVERS_PATCHLEVEL)
  69.            )
  70.           )
  71.          ) )
  72.     {
  73.         printf("  aborting because of too old UnZip DLL version!\n");
  74.         return -1;
  75.     }
  76.  
  77.     /* In case the offsetof() macro is not supported by some C compiler
  78.        environment, it might be replaced by something like:
  79.          ((extent)(void *)&(((UzpVer *)0)->dllapimin))
  80.      */
  81.     if (pVersion->structlen >=
  82. #if defined(MODERN) && !defined(NO_STDDEF_H)
  83.         ( offsetof(UzpVer, dllapimin)
  84. #else
  85.           ((unsigned)&(((UzpVer *)0)->dllapimin))
  86. #endif
  87.          + sizeof(_version_type) ))
  88.     {
  89. #ifdef OS2DLL
  90. #       define UZ_API_COMP_MAJOR        UZ_OS2API_COMP_MAJOR
  91. #       define UZ_API_COMP_MINOR        UZ_OS2API_COMP_MINOR
  92. #       define UZ_API_COMP_REVIS        UZ_OS2API_COMP_REVIS
  93. #else /* !OS2DLL */
  94. #ifdef WINDLL
  95. #       define UZ_API_COMP_MAJOR        UZ_WINAPI_COMP_MAJOR
  96. #       define UZ_API_COMP_MINOR        UZ_WINAPI_COMP_MINOR
  97. #       define UZ_API_COMP_REVIS        UZ_WINAPI_COMP_REVIS
  98. #else /* !WINDLL */
  99. #       define UZ_API_COMP_MAJOR        UZ_GENAPI_COMP_MAJOR
  100. #       define UZ_API_COMP_MINOR        UZ_GENAPI_COMP_MINOR
  101. #       define UZ_API_COMP_REVIS        UZ_GENAPI_COMP_REVIS
  102. #endif /* ?WINDLL */
  103. #endif /* ?OS2DLL */
  104.         printf(
  105.           "   UnZip API version: can handle <= %u.%u%u, DLL supplies %u.%u%u\n",
  106.           UZ_API_COMP_MAJOR, UZ_API_COMP_MINOR, UZ_API_COMP_REVIS,
  107.           pVersion->dllapimin.major, pVersion->dllapimin.minor,
  108.           pVersion->dllapimin.patchlevel);
  109.         if ( (pVersion->dllapimin.major > UZ_API_COMP_MAJOR) ||
  110.              ((pVersion->dllapimin.major == UZ_API_COMP_MAJOR) &&
  111.               ((pVersion->dllapimin.minor > UZ_API_COMP_MINOR) ||
  112.                ((pVersion->dllapimin.minor == UZ_API_COMP_MINOR) &&
  113.                 (pVersion->dllapimin.patchlevel > UZ_API_COMP_REVIS)
  114.                )
  115.               )
  116.              ) )
  117.         {
  118.             printf("  aborting because of unsupported dll api version!\n");
  119.             return -1;
  120.         }
  121.     }
  122.     printf("\n");
  123.  
  124.     /* call the actual UnZip routine (string-arguments version) */
  125.     return UzpMain(argc, argv);
  126. }
  127.