blob: 9eedfdecdabfd4bec5f2b1c82974f0109ab8b592 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef LIBHDFS_PLATFORM_H
#define LIBHDFS_PLATFORM_H
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
/*
* O_ACCMODE defined to match Linux definition.
*/
#ifndef O_ACCMODE
#define O_ACCMODE 0x0003
#endif
/*
* Windows has a different name for its maximum path length constant.
*/
#ifndef PATH_MAX
#define PATH_MAX MAX_PATH
#endif
/*
* Windows does not define EDQUOT and ESTALE in errno.h. The closest equivalents
* are these constants from winsock.h.
*/
#ifndef EDQUOT
#define EDQUOT WSAEDQUOT
#endif
#ifndef ESTALE
#define ESTALE WSAESTALE
#endif
/*
* gcc-style type-checked format arguments are not supported on Windows, so just
* stub this macro.
*/
#define TYPE_CHECKED_PRINTF_FORMAT(formatArg, varArgs)
/*
* Define macros for various string formatting functions not defined on Windows.
* Where possible, we reroute to one of the secure CRT variants. On Windows,
* the preprocessor does support variadic macros, even though they weren't
* defined until C99.
*/
#define snprintf(str, size, format, ...) \
_snprintf_s((str), (size), _TRUNCATE, (format), __VA_ARGS__)
#define strncpy(dest, src, n) \
strncpy_s((dest), (n), (src), _TRUNCATE)
#define strtok_r(str, delim, saveptr) \
strtok_s((str), (delim), (saveptr))
#define vsnprintf(str, size, format, ...) \
vsnprintf_s((str), (size), _TRUNCATE, (format), __VA_ARGS__)
/*
* Mutex data type defined as Windows CRITICAL_SECTION. A critical section (not
* Windows mutex) is used, because libhdfs only needs synchronization of multiple
* threads within a single process, not synchronization across process
* boundaries.
*/
typedef CRITICAL_SECTION mutex;
/*
* Thread data type defined as HANDLE to a Windows thread.
*/
typedef HANDLE threadId;
#endif