mirror of https://github.com/ecmwf/eccodes.git
Windows support: merge branch dtip-windows from Github
This commit is contained in:
parent
ef43a281d1
commit
0e431eea67
|
@ -283,9 +283,18 @@ if( IEEE_LE )
|
|||
set( IEEE_BE 0 )
|
||||
endif()
|
||||
|
||||
# Symbols need to be explicitly exported on Windows so we can link to dlls.
|
||||
if( EC_OS_NAME MATCHES "windows" )
|
||||
# Symbols need to be explicitly exported on Windows so we can link to dlls.
|
||||
set( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
|
||||
|
||||
# Suppress compliler warnings - see ECC-850
|
||||
# Suppress warnings about using 'insecure' functions. Fixing this would require changes all over
|
||||
# the codebase which would damage portability.
|
||||
ecbuild_add_c_flags("/D_CRT_SECURE_NO_WARNINGS")
|
||||
# Suppress warnings about using well-known C functions.
|
||||
ecbuild_add_c_flags("/D_CRT_NONSTDC_NO_DEPRECATE")
|
||||
# Suppress C4267: warns about possible loss of data when converting 'size_t' to 'int'.
|
||||
ecbuild_add_c_flags("/wd4267")
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
|
|
|
@ -13,8 +13,10 @@
|
|||
|
||||
/* Microsoft Windows Visual Studio support */
|
||||
#if defined(_WIN32) && defined(_MSC_VER)
|
||||
# define ECCODES_ON_WINDOWS
|
||||
# define YY_NO_UNISTD_H
|
||||
#define ECCODES_ON_WINDOWS
|
||||
#ifndef YY_NO_UNISTD_H
|
||||
#define YY_NO_UNISTD_H
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -215,7 +215,7 @@ static void grib_md5_flush(grib_md5_state* s)
|
|||
|
||||
void grib_md5_init(grib_md5_state* s)
|
||||
{
|
||||
Assert( sizeof(UnsignedInt64) == 8 );
|
||||
Assert( sizeof(uint64_t) == 8 );
|
||||
memset(s,0,sizeof(grib_md5_state));
|
||||
s->h0 = 0x67452301;
|
||||
s->h1 = 0xefcdab89;
|
||||
|
@ -243,8 +243,8 @@ void grib_md5_add(grib_md5_state* s,const void* data,size_t len)
|
|||
|
||||
void grib_md5_end(grib_md5_state* s, char *digest)
|
||||
{
|
||||
UnsignedInt64 h = 8;
|
||||
UnsignedInt64 bits, leng = s->size * h;
|
||||
uint64_t h = 8;
|
||||
uint64_t bits, leng = s->size * h;
|
||||
unsigned char c = 0x80;
|
||||
int i;
|
||||
|
||||
|
|
11
src/md5.h
11
src/md5.h
|
@ -12,17 +12,10 @@
|
|||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "eccodes_windef.h"
|
||||
|
||||
#ifdef ECCODES_ON_WINDOWS
|
||||
typedef unsigned __int64 UnsignedInt64;
|
||||
#else
|
||||
# include <stdint.h>
|
||||
typedef uint64_t UnsignedInt64;
|
||||
#endif
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct grib_md5_state {
|
||||
UnsignedInt64 size;
|
||||
uint64_t size;
|
||||
|
||||
unsigned long words[64];
|
||||
unsigned long word_count;
|
||||
|
|
|
@ -9,12 +9,6 @@
|
|||
*/
|
||||
|
||||
#include "config.h"
|
||||
/* #include <sys/types.h> */
|
||||
/* #include <inttypes.h> */
|
||||
/* #include <stdio.h> */
|
||||
/* #include <stdlib.h> */
|
||||
/* #include <errno.h> */
|
||||
/* #include <string.h> */
|
||||
#include "grib_api_internal.h"
|
||||
|
||||
#ifndef ECCODES_ON_WINDOWS
|
||||
|
|
|
@ -51,29 +51,22 @@ void scan(const char* name)
|
|||
}
|
||||
}
|
||||
#else
|
||||
// based on similar code in grib_tools.c
|
||||
static int isWinDir(const struct _finddata_t *fileinfo)
|
||||
{
|
||||
if((fileinfo->attrib & 16) == 16)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
void scan(const char* name)
|
||||
{
|
||||
struct _finddata_t fileinfo;
|
||||
intptr_t handle;
|
||||
if((handle = _findfirst(name, &fileinfo)) != -1)
|
||||
char tmp[1024];
|
||||
sprintf(tmp, "%s/*", name);
|
||||
if((handle = _findfirst(tmp, &fileinfo)) != -1)
|
||||
{
|
||||
char tmp[1024];
|
||||
do {
|
||||
if(isWinDir(&fileinfo))
|
||||
{
|
||||
if(fileinfo.name[0] != '.') {
|
||||
sprintf(tmp, "%s/%s", name, fileinfo.name);
|
||||
scan(tmp);
|
||||
}
|
||||
if(fileinfo.name[0] != '.') {
|
||||
sprintf(tmp, "%s/%s", name, fileinfo.name);
|
||||
scan(tmp);
|
||||
}
|
||||
} while(!_findnext(handle, &fileinfo));
|
||||
|
||||
_findclose(handle);
|
||||
}
|
||||
else
|
||||
validate(name);
|
||||
|
|
|
@ -532,38 +532,32 @@ static int scan(grib_context* c,grib_runtime_options* options,const char* dir)
|
|||
process(c,options,buf);
|
||||
}
|
||||
}
|
||||
closedir(d);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int isWinDir(const struct _finddata_t *fileinfo)
|
||||
{
|
||||
if((fileinfo->attrib & 16) == 16)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
static void doProcessing(grib_context* c,grib_runtime_options* options,const char* dir, const struct _finddata_t *fileinfo)
|
||||
{
|
||||
if(isWinDir(fileinfo))
|
||||
{
|
||||
if(strcmp(fileinfo->name, ".") != 0 && strcmp(fileinfo->name,"..") != 0) {
|
||||
char buf[1024];
|
||||
sprintf(buf,"%s/%s",dir,fileinfo->name);
|
||||
process(c,options,buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
static int scan(grib_context* c,grib_runtime_options* options,const char* dir) {
|
||||
struct _finddata_t fileinfo;
|
||||
intptr_t handle;
|
||||
if((handle = _findfirst(dir, &fileinfo)) != -1)
|
||||
doProcessing(c, options, dir, &fileinfo);
|
||||
char buffer[1024];
|
||||
sprintf(buffer, "%s/*", dir);
|
||||
if((handle = _findfirst(buffer, &fileinfo)) != -1)
|
||||
{
|
||||
do {
|
||||
if(strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name,"..") != 0) {
|
||||
char buf[1024];
|
||||
sprintf(buf, "%s/%s", dir, fileinfo.name);
|
||||
process(c,options,buf);
|
||||
}
|
||||
} while(!_findnext(handle, &fileinfo));
|
||||
|
||||
_findclose(handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
grib_context_log(c,(GRIB_LOG_ERROR) | (GRIB_LOG_PERROR) , "opendir %s",dir);
|
||||
return GRIB_IO_PROBLEM;
|
||||
}
|
||||
while(!_findnext(handle, &fileinfo))
|
||||
doProcessing(c, options, dir, &fileinfo);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue