From be615daf41b4bcc61322a987088ee209b5e66c19 Mon Sep 17 00:00:00 2001 From: Vicente Olivert Riera Date: Wed, 24 Sep 2014 13:54:15 +0100 Subject: [PATCH] Add support for uClibc The stable-1.1 branch of freerdp fails to build when using a uClibc toolchain because it's using functions which are not implemented in uClibc, like eventfd_read, eventfd_write and futimes. That is causing build failures like these ones: ../../libwinpr/synch/libwinpr-synch.so.0.1.0: undefined reference to `eventfd_read' ../../libwinpr/synch/libwinpr-synch.so.0.1.0: undefined reference to `eventfd_write' ../../common/libfreerdp-client.so.1.1.0: undefined reference to `futimes' This patch is based on this upstream patch: https://github.com/FreeRDP/FreeRDP/commit/5f9c36da5d5cd3c5dce49f7b32fe011cb293f9ec/ Signed-off-by: Vicente Olivert Riera --- channels/drive/client/drive_file.c | 12 +++++++++--- winpr/libwinpr/synch/event.c | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/channels/drive/client/drive_file.c b/channels/drive/client/drive_file.c index 376b4fe..b20f408 100644 --- a/channels/drive/client/drive_file.c +++ b/channels/drive/client/drive_file.c @@ -480,7 +480,11 @@ BOOL drive_file_set_information(DRIVE_FILE* file, UINT32 FsInformationClass, UIN int status; char* fullpath; struct STAT st; +#if defined(ANDROID) struct timeval tv[2]; +#else + struct timespec tv[2]; +#endif UINT64 LastWriteTime; UINT32 FileAttributes; UINT32 FileNameLength; @@ -501,15 +505,17 @@ BOOL drive_file_set_information(DRIVE_FILE* file, UINT32 FsInformationClass, UIN return FALSE; tv[0].tv_sec = st.st_atime; - tv[0].tv_usec = 0; tv[1].tv_sec = (LastWriteTime > 0 ? FILE_TIME_RDP_TO_SYSTEM(LastWriteTime) : st.st_mtime); - tv[1].tv_usec = 0; #ifndef WIN32 /* TODO on win32 */ #ifdef ANDROID + tv[0].tv_usec = 0; + tv[1].tv_usec = 0; utimes(file->fullpath, tv); #else - futimes(file->fd, tv); + tv[0].tv_nsec = 0; + tv[1].tv_nsec = 0; + futimens(file->fd, tv); #endif if (FileAttributes > 0) diff --git a/winpr/libwinpr/synch/event.c b/winpr/libwinpr/synch/event.c index 173afaf..943cccb 100644 --- a/winpr/libwinpr/synch/event.c +++ b/winpr/libwinpr/synch/event.c @@ -115,6 +115,20 @@ HANDLE OpenEventA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName) return NULL; } +#ifdef HAVE_EVENTFD_H +#if defined(__UCLIBC__) +static int eventfd_read(int fd, eventfd_t* value) +{ + return (read(fd, value, sizeof(*value)) == sizeof(*value)) ? 0 : -1; +} + +static int eventfd_write(int fd, eventfd_t value) +{ + return (write(fd, &value, sizeof(value)) == sizeof(value)) ? 0 : -1; +} +#endif +#endif + BOOL SetEvent(HANDLE hEvent) { ULONG Type; -- 1.7.1