Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6725 siemargl 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 
24
#include "unzip.h"
25
#if defined(MODERN) && !defined(NO_STDDEF_H)
26
# include 
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
}