You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@locus.apache.org on 2000/05/12 17:32:38 UTC

cvs commit: apache-2.0/src/lib/apr/misc/win32 misc.c misc.h start.c

wrowe       00/05/12 08:32:38

  Modified:    src/lib/apr aprlib.dsp
               src/lib/apr/misc/win32 misc.h start.c
  Added:       src/lib/apr/misc/win32 misc.c
  Log:
  
    Create a true misc.c for ap_get_oslevel and ap_load_dll_func,
    and clean up the naming of the entire LoadLateDll declaration.
  
  
  Revision  Changes    Path
  1.26      +4 -0      apache-2.0/src/lib/apr/aprlib.dsp
  
  Index: aprlib.dsp
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/aprlib.dsp,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- aprlib.dsp	2000/05/01 14:26:11	1.25
  +++ aprlib.dsp	2000/05/12 15:32:37	1.26
  @@ -162,6 +162,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=.\misc\win32\misc.c
  +# End Source File
  +# Begin Source File
  +
   SOURCE=.\misc\win32\names.c
   # End Source File
   # Begin Source File
  
  
  
  1.13      +14 -14    apache-2.0/src/lib/apr/misc/win32/misc.h
  
  Index: misc.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/win32/misc.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- misc.h	2000/05/12 03:59:50	1.12
  +++ misc.h	2000/05/12 15:32:37	1.13
  @@ -94,23 +94,23 @@
       DLL_defined = 4        // must define as last idx_ + 1
   } ap_dlltoken_e;
   
  -FARPROC LoadLateDllFunc(ap_dlltoken_e fnLib, char *fnName, int ordinal);
  +FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char *fnName, int ordinal);
   
  -/* The LateFunctionName call WILL fault if the function cannot be loaded */
  +/* The ap_load_dll_func call WILL fault if the function cannot be loaded */
   
  -#define DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
  -    typedef rettype (calltype *fpt##fn) args; \
  -    static fpt##fn pfn##fn = NULL; \
  -    __inline rettype Late##fn args \
  -    {   if (!pfn##fn) \
  -            pfn##fn = (fpt##fn) LoadLateDllFunc(lib, #fn, ord); \
  -        return (*(pfn##fn)) names; }; \
  +#define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
  +    typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
  +    static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
  +    __inline rettype ap_winapi_##fn args \
  +    {   if (!ap_winapi_pfn_##fn) \
  +            ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
  +        return (*(ap_winapi_pfn_##fn)) names; }; \
   
   /* Provide late bound declarations of every API function missing from 
    * one or more supported releases of the Win32 API
    * 
    * lib is the enumerated token from ap_dlltoken_e, and must correspond 
  - * to the string table entry in start.c used by the LoadLateDllFunc().
  + * to the string table entry in start.c used by the ap_load_dll_func().
    * Token names (attempt to) follow Windows.h declarations prefixed by DLL_
    * in order to facilitate comparison.  Use the exact declaration syntax
    * and names from Windows.h to prevent ambigutity and bugs.
  @@ -125,18 +125,18 @@
    * In the case of non-text functions, simply #define the original name
    */
   
  -DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, GetFileAttributesExA, 0, (
  +AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, GetFileAttributesExA, 0, (
       IN LPCSTR lpFileName,
       IN GET_FILEEX_INFO_LEVELS fInfoLevelId,
       OUT LPVOID lpFileInformation),
       (lpFileName, fInfoLevelId, lpFileInformation));
   #undef GetFileAttributesEx
  -#define GetFileAttributesEx LateGetFileAttributesExA
  +#define GetFileAttributesEx ap_winapi_GetFileAttributesExA
   
  -DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
  +AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
       IN HANDLE hFile),
       (hFile));
  -#define CancelIo LateCancelIo
  +#define CancelIo ap_winapi_CancelIo
   
   ap_status_t ap_get_oslevel(struct ap_pool_t *, ap_oslevel_e *);
   
  
  
  
  1.31      +0 -80     apache-2.0/src/lib/apr/misc/win32/start.c
  
  Index: start.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/win32/start.c,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- start.c	2000/05/01 03:24:33	1.30
  +++ start.c	2000/05/12 15:32:37	1.31
  @@ -96,64 +96,6 @@
       return APR_SUCCESS;
   }
   
  -ap_status_t ap_get_oslevel(ap_pool_t *cont, ap_oslevel_e *level)
  -{
  -    static OSVERSIONINFO oslev;
  -    static unsigned int servpack = 0;
  -    static BOOL first = TRUE;
  -    char *pservpack;
  -
  -    if (first) {
  -        first = FALSE;
  -        oslev.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  -        GetVersionEx(&oslev);
  -        if (oslev.dwPlatformId == VER_PLATFORM_WIN32_NT) {
  -            for (pservpack = oslev.szCSDVersion; 
  -                 *pservpack && !isdigit(*pservpack); pservpack++)
  -                ;
  -            if (*pservpack)
  -                servpack = atoi(pservpack);
  -        }
  -    }
  -    if (oslev.dwPlatformId == VER_PLATFORM_WIN32_NT) {
  -        if (oslev.dwMajorVersion == 5) {
  -            (*level) = APR_WIN_2000;
  -        }
  -        else if (oslev.dwMajorVersion == 4) {
  -            if (servpack >= 6) {
  -                (*level) = APR_WIN_NT_4_SP6;
  -            }
  -            else if (servpack >= 4) {
  -                (*level) = APR_WIN_NT_4_SP4;
  -            }
  -            else if (servpack >= 3) {
  -                (*level) = APR_WIN_NT_4_SP3;
  -            }
  -            else if (servpack >= 2) {
  -                (*level) = APR_WIN_NT_4_SP2;
  -            }
  -            else {
  -                (*level) = APR_WIN_NT_4;
  -            }
  -        }
  -        else {
  -            (*level) = APR_WIN_NT;
  -        }
  -        return APR_SUCCESS;
  -    }
  -    else if (oslev.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
  -        if (oslev.dwMinorVersion == 0) {
  -            (*level) = APR_WIN_95;
  -            return APR_SUCCESS;
  -        }
  -        else if (oslev.dwMinorVersion > 0) {
  -            (*level) = APR_WIN_98;
  -            return APR_SUCCESS;
  -        }
  -    }
  -    return APR_EEXIST;
  -}
  -
   ap_status_t ap_set_userdata(void *data, char *key,
                               ap_status_t (*cleanup) (void *),
                               ap_pool_t *cont)
  @@ -206,28 +148,6 @@
           return APR_SUCCESS;
       }
       return APR_ENOPOOL;
  -}
  -
  -/* This is the helper code to resolve late bound entry points 
  - * missing from one or more releases of the Win32 API
  - */
  -
  -static const char* const lateDllName[DLL_defined] = {
  -    "kernel32", "advapi32", "mswsock",  "ws2_32"  };
  -static HMODULE lateDllHandle[DLL_defined] = {
  -    NULL,       NULL,       NULL,       NULL      };
  -
  -FARPROC LoadLateDllFunc(ap_dlltoken_e fnLib, char* fnName, int ordinal)
  -{
  -    if (!lateDllHandle[fnLib]) { 
  -        lateDllHandle[fnLib] = LoadLibrary(lateDllName[fnLib]);
  -        if (!lateDllHandle[fnLib])
  -            return NULL;
  -    }
  -    if (ordinal)
  -        return GetProcAddress(lateDllHandle[fnLib], (char *) ordinal);
  -    else
  -        return GetProcAddress(lateDllHandle[fnLib], fnName);
   }
   
   /* This puts one thread in a Listen for signals mode */
  
  
  
  1.1                  apache-2.0/src/lib/apr/misc/win32/misc.c
  
  Index: misc.c
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #include "apr_private.h"
  #include "misc.h"
  
  ap_status_t ap_get_oslevel(ap_pool_t *cont, ap_oslevel_e *level)
  {
      static OSVERSIONINFO oslev;
      static unsigned int servpack = 0;
      static BOOL first = TRUE;
      char *pservpack;
  
      if (first) {
          first = FALSE;
          oslev.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
          GetVersionEx(&oslev);
          if (oslev.dwPlatformId == VER_PLATFORM_WIN32_NT) {
              for (pservpack = oslev.szCSDVersion; 
                   *pservpack && !isdigit(*pservpack); pservpack++)
                  ;
              if (*pservpack)
                  servpack = atoi(pservpack);
          }
      }
      if (oslev.dwPlatformId == VER_PLATFORM_WIN32_NT) {
          if (oslev.dwMajorVersion == 5) {
              (*level) = APR_WIN_2000;
          }
          else if (oslev.dwMajorVersion == 4) {
              if (servpack >= 6) {
                  (*level) = APR_WIN_NT_4_SP6;
              }
              else if (servpack >= 4) {
                  (*level) = APR_WIN_NT_4_SP4;
              }
              else if (servpack >= 3) {
                  (*level) = APR_WIN_NT_4_SP3;
              }
              else if (servpack >= 2) {
                  (*level) = APR_WIN_NT_4_SP2;
              }
              else {
                  (*level) = APR_WIN_NT_4;
              }
          }
          else {
              (*level) = APR_WIN_NT;
          }
          return APR_SUCCESS;
      }
      else if (oslev.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
          if (oslev.dwMinorVersion == 0) {
              (*level) = APR_WIN_95;
              return APR_SUCCESS;
          }
          else if (oslev.dwMinorVersion > 0) {
              (*level) = APR_WIN_98;
              return APR_SUCCESS;
          }
      }
      return APR_EEXIST;
  }
  
  
  /* This is the helper code to resolve late bound entry points 
   * missing from one or more releases of the Win32 API
   */
  
  static const char* const lateDllName[DLL_defined] = {
      "kernel32", "advapi32", "mswsock",  "ws2_32"  };
  static HMODULE lateDllHandle[DLL_defined] = {
      NULL,       NULL,       NULL,       NULL      };
  
  FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal)
  {
      if (!lateDllHandle[fnLib]) { 
          lateDllHandle[fnLib] = LoadLibrary(lateDllName[fnLib]);
          if (!lateDllHandle[fnLib])
              return NULL;
      }
      if (ordinal)
          return GetProcAddress(lateDllHandle[fnLib], (char *) ordinal);
      else
          return GetProcAddress(lateDllHandle[fnLib], fnName);
  }