Commit d496cae9 authored by Christopher Dykes's avatar Christopher Dykes Committed by Facebook Github Bot

Fix some implicit truncation and implicit sign coersion warnings in the Windows portability layer

Summary: More progress towards being able to build Folly cleanly with MSVC's truncation and sign coersion warnings enabled.

Reviewed By: yfeldblum

Differential Revision: D4288060

fbshipit-source-id: ce42d2099163ed5a9c9a9bb736a80bb2407f7595
parent 2a7bf484
...@@ -144,7 +144,7 @@ int listen(int s, int backlog) { ...@@ -144,7 +144,7 @@ int listen(int s, int backlog) {
int poll(struct pollfd fds[], nfds_t nfds, int timeout) { int poll(struct pollfd fds[], nfds_t nfds, int timeout) {
// TODO: Allow both file descriptors and SOCKETs in this. // TODO: Allow both file descriptors and SOCKETs in this.
for (int i = 0; i < nfds; i++) { for (int i = 0; i < nfds; i++) {
fds[i].fd = fd_to_socket(fds[i].fd); fds[i].fd = fd_to_socket((int)fds[i].fd);
} }
return ::WSAPoll(fds, (ULONG)nfds, timeout); return ::WSAPoll(fds, (ULONG)nfds, timeout);
} }
...@@ -192,7 +192,7 @@ ssize_t recvfrom( ...@@ -192,7 +192,7 @@ ssize_t recvfrom(
WSABUF wBuf{}; WSABUF wBuf{};
wBuf.buf = (CHAR*)buf; wBuf.buf = (CHAR*)buf;
wBuf.len = len; wBuf.len = (ULONG)len;
WSAMSG wMsg{}; WSAMSG wMsg{};
wMsg.dwBufferCount = 1; wMsg.dwBufferCount = 1;
wMsg.lpBuffers = &wBuf; wMsg.lpBuffers = &wBuf;
......
...@@ -33,7 +33,7 @@ extern "C" int flock(int fd, int operation) { ...@@ -33,7 +33,7 @@ extern "C" int flock(int fd, int operation) {
return -1; return -1;
} }
} else { } else {
int flags = 0 DWORD flags = 0
| (operation & LOCK_NB ? LOCKFILE_FAIL_IMMEDIATELY : 0) | (operation & LOCK_NB ? LOCKFILE_FAIL_IMMEDIATELY : 0)
| (operation & LOCK_EX ? LOCKFILE_EXCLUSIVE_LOCK : 0) | (operation & LOCK_EX ? LOCKFILE_EXCLUSIVE_LOCK : 0)
; ;
......
...@@ -127,7 +127,7 @@ void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t off) { ...@@ -127,7 +127,7 @@ void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t off) {
ret = MapViewOfFileEx( ret = MapViewOfFileEx(
fmh, fmh,
accessFlags, accessFlags,
(DWORD)((off >> 32) & 0xFFFFFFFF), (DWORD)(0), // off_t is only 32-bit :(
(DWORD)(off & 0xFFFFFFFF), (DWORD)(off & 0xFFFFFFFF),
0, 0,
addr); addr);
......
...@@ -80,7 +80,7 @@ static ssize_t doVecOperation(int fd, const iovec* iov, int count) { ...@@ -80,7 +80,7 @@ static ssize_t doVecOperation(int fd, const iovec* iov, int count) {
void* curBase = iov[0].iov_base; void* curBase = iov[0].iov_base;
size_t curLen = iov[0].iov_len; size_t curLen = iov[0].iov_len;
while (curIov < count) { while (curIov < count) {
int res = 0; ssize_t res = 0;
if (isRead) { if (isRead) {
res = read(fd, curBase, (unsigned int)curLen); res = read(fd, curBase, (unsigned int)curLen);
if (res == 0 && curLen != 0) { if (res == 0 && curLen != 0) {
......
...@@ -25,10 +25,11 @@ template <typename _Rep, typename _Period> ...@@ -25,10 +25,11 @@ template <typename _Rep, typename _Period>
static void duration_to_ts( static void duration_to_ts(
std::chrono::duration<_Rep, _Period> d, std::chrono::duration<_Rep, _Period> d,
struct timespec* ts) { struct timespec* ts) {
ts->tv_sec = std::chrono::duration_cast<std::chrono::seconds>(d).count(); ts->tv_sec =
ts->tv_nsec = std::chrono::duration_cast<std::chrono::nanoseconds>( time_t(std::chrono::duration_cast<std::chrono::seconds>(d).count());
d % std::chrono::seconds(1)) ts->tv_nsec = long(std::chrono::duration_cast<std::chrono::nanoseconds>(
.count(); d % std::chrono::seconds(1))
.count());
} }
#if !FOLLY_HAVE_CLOCK_GETTIME #if !FOLLY_HAVE_CLOCK_GETTIME
...@@ -215,8 +216,9 @@ extern "C" int clock_gettime(clockid_t clock_id, struct timespec* tp) { ...@@ -215,8 +216,9 @@ extern "C" int clock_gettime(clockid_t clock_id, struct timespec* tp) {
const auto unanosToTimespec = [](timespec* tp, unsigned_nanos t) -> int { const auto unanosToTimespec = [](timespec* tp, unsigned_nanos t) -> int {
static constexpr unsigned_nanos one_sec(std::chrono::seconds(1)); static constexpr unsigned_nanos one_sec(std::chrono::seconds(1));
tp->tv_sec = std::chrono::duration_cast<std::chrono::seconds>(t).count(); tp->tv_sec =
tp->tv_nsec = (t % one_sec).count(); time_t(std::chrono::duration_cast<std::chrono::seconds>(t).count());
tp->tv_nsec = long((t % one_sec).count());
return 0; return 0;
}; };
......
...@@ -147,7 +147,7 @@ int getdtablesize() { return _getmaxstdio(); } ...@@ -147,7 +147,7 @@ int getdtablesize() { return _getmaxstdio(); }
int getgid() { return 1; } int getgid() { return 1; }
pid_t getpid() { return pid_t(GetCurrentProcessId()); } pid_t getpid() { return (pid_t)uint64_t(GetCurrentProcessId()); }
// No major need to implement this, and getting a non-potentially // No major need to implement this, and getting a non-potentially
// stale ID on windows is a bit involved. // stale ID on windows is a bit involved.
...@@ -177,18 +177,18 @@ int pwrite(int fd, const void* buf, size_t count, off_t offset) { ...@@ -177,18 +177,18 @@ int pwrite(int fd, const void* buf, size_t count, off_t offset) {
return wrapPositional(_write, fd, offset, buf, (unsigned int)count); return wrapPositional(_write, fd, offset, buf, (unsigned int)count);
} }
int read(int fh, void* buf, unsigned int mcc) { ssize_t read(int fh, void* buf, size_t count) {
if (folly::portability::sockets::is_fh_socket(fh)) { if (folly::portability::sockets::is_fh_socket(fh)) {
SOCKET s = (SOCKET)_get_osfhandle(fh); SOCKET s = (SOCKET)_get_osfhandle(fh);
if (s != INVALID_SOCKET) { if (s != INVALID_SOCKET) {
auto r = folly::portability::sockets::recv(fh, buf, (size_t)mcc, 0); auto r = folly::portability::sockets::recv(fh, buf, count, 0);
if (r == -1 && WSAGetLastError() == WSAEWOULDBLOCK) { if (r == -1 && WSAGetLastError() == WSAEWOULDBLOCK) {
errno = EAGAIN; errno = EAGAIN;
} }
return r; return r;
} }
} }
auto r = _read(fh, buf, mcc); auto r = _read(fh, buf, unsigned int(count));
if (r == -1 && GetLastError() == ERROR_NO_DATA) { if (r == -1 && GetLastError() == ERROR_NO_DATA) {
// This only happens if the file was non-blocking and // This only happens if the file was non-blocking and
// no data was present. We have to translate the error // no data was present. We have to translate the error
...@@ -214,7 +214,8 @@ ssize_t readlink(const char* path, char* buf, size_t buflen) { ...@@ -214,7 +214,8 @@ ssize_t readlink(const char* path, char* buf, size_t buflen) {
return -1; return -1;
} }
DWORD ret = GetFinalPathNameByHandleA(h, buf, buflen - 1, VOLUME_NAME_DOS); DWORD ret =
GetFinalPathNameByHandleA(h, buf, DWORD(buflen - 1), VOLUME_NAME_DOS);
if (ret >= buflen || ret >= MAX_PATH || !ret) { if (ret >= buflen || ret >= MAX_PATH || !ret) {
CloseHandle(h); CloseHandle(h);
return -1; return -1;
...@@ -270,7 +271,7 @@ int usleep(unsigned int ms) { ...@@ -270,7 +271,7 @@ int usleep(unsigned int ms) {
return 0; return 0;
} }
int write(int fh, void const* buf, unsigned int count) { ssize_t write(int fh, void const* buf, size_t count) {
if (folly::portability::sockets::is_fh_socket(fh)) { if (folly::portability::sockets::is_fh_socket(fh)) {
SOCKET s = (SOCKET)_get_osfhandle(fh); SOCKET s = (SOCKET)_get_osfhandle(fh);
if (s != INVALID_SOCKET) { if (s != INVALID_SOCKET) {
...@@ -281,7 +282,7 @@ int write(int fh, void const* buf, unsigned int count) { ...@@ -281,7 +282,7 @@ int write(int fh, void const* buf, unsigned int count) {
return r; return r;
} }
} }
auto r = _write(fh, buf, count); auto r = _write(fh, buf, unsigned int(count));
if ((r > 0 && r != count) || (r == -1 && errno == ENOSPC)) { if ((r > 0 && r != count) || (r == -1 && errno == ENOSPC)) {
// Writing to a pipe with a full buffer doesn't generate // Writing to a pipe with a full buffer doesn't generate
// any error type, unless it caused us to write exactly 0 // any error type, unless it caused us to write exactly 0
......
...@@ -69,7 +69,7 @@ int getuid(); ...@@ -69,7 +69,7 @@ int getuid();
int isatty(int fh); int isatty(int fh);
int lockf(int fd, int cmd, off_t len); int lockf(int fd, int cmd, off_t len);
long lseek(int fh, long off, int orig); long lseek(int fh, long off, int orig);
int read(int fh, void* buf, unsigned int mcc); ssize_t read(int fh, void* buf, size_t mcc);
int rmdir(const char* path); int rmdir(const char* path);
int pipe(int pth[2]); int pipe(int pth[2]);
int pread(int fd, void* buf, size_t count, off_t offset); int pread(int fd, void* buf, size_t count, off_t offset);
...@@ -82,7 +82,7 @@ size_t sysconf(int tp); ...@@ -82,7 +82,7 @@ size_t sysconf(int tp);
long tell(int fh); long tell(int fh);
int truncate(const char* path, off_t len); int truncate(const char* path, off_t len);
int usleep(unsigned int ms); int usleep(unsigned int ms);
int write(int fh, void const* buf, unsigned int mcc); ssize_t write(int fh, void const* buf, size_t count);
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment