Added support for android SetFileTime.
authorArmin Novak <armin.novak@thincast.com>
Fri, 26 Feb 2016 11:13:02 +0000 (12:13 +0100)
committerArmin Novak <armin.novak@thincast.com>
Fri, 26 Feb 2016 11:27:59 +0000 (12:27 +0100)
Deactivated libjpeg support for android.

scripts/android-build-freerdp.sh
scripts/android-build.conf
winpr/libwinpr/file/file.c

index a522f86..73ce021 100755 (executable)
@@ -80,6 +80,7 @@ fi
 common_run mkdir -p $BUILD_SRC
 
 CMAKE_CMD_ARGS="-DANDROID_NDK=$ANDROID_NDK \
+       -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \
        -DCMAKE_TOOLCHAIN_FILE=$SRC_DIR/cmake/AndroidToolchain.cmake \
        -DCMAKE_INSTALL_PREFIX=$BUILD_DST \
        -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
index fff1ab2..df51912 100644 (file)
@@ -4,10 +4,11 @@
 SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
 SCRIPT_PATH=$(realpath "$SCRIPT_PATH")
 
-WITH_JPEG=1
+WITH_JPEG=0
 WITH_OPENH264=1
 WITH_OPENSSL=1
 BUILD_DEPS=1
+ANDROID_NATIVE_API_LEVEL=android-12
 
 JPEG_TAG=master
 OPENH264_TAG=v1.5.0
index 7e22852..606121f 100644 (file)
@@ -352,22 +352,25 @@ static BOOL FileSetFileTime(HANDLE hFile, const FILETIME *lpCreationTime,
                const FILETIME *lpLastAccessTime, const FILETIME *lpLastWriteTime)
 {
        int rc;
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(ANDROID)
        struct stat buf;
 #endif
+#ifdef ANDROID
+       struct timeval timevals[2];
+#else
        struct timespec times[2]; /* last access, last modification */
+#endif
        WINPR_FILE* pFile = (WINPR_FILE*)hFile;
        const UINT64 EPOCH_DIFF = 11644473600ULL;
 
        if (!hFile)
                return FALSE;
 
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(ANDROID)
        rc = fstat(fileno(pFile->fp), &buf);
        if (rc < 0)
                return FALSE;
 #endif
-       memset(times, 0, sizeof(times));
        if (!lpLastAccessTime)
        {
 #ifdef __APPLE__
@@ -377,7 +380,11 @@ static BOOL FileSetFileTime(HANDLE hFile, const FILETIME *lpCreationTime,
                times[0].tv_sec = buf.st_atime;
                times[0].tv_nsec = buf.st_atimensec;
 #endif
+#elif ANDROID
+               timevals[0].tv_sec = buf.st_mtime;
+               timevals[0].tv_usec = buf.st_mtimensec / 1000UL;
 #else
+               times[0].tv_sec = UTIME_OMIT;
                times[0].tv_nsec = UTIME_OMIT;
 #endif
        }
@@ -388,8 +395,15 @@ static BOOL FileSetFileTime(HANDLE hFile, const FILETIME *lpCreationTime,
                tmp -= EPOCH_DIFF;
                tmp /= 10ULL;
 
+#ifdef ANDROID
+               tmp /= 10000ULL;
+
+               timevals[0].tv_sec = tmp / 10000ULL;
+               timevals[0].tv_usec = tmp % 10000ULL;
+#else
                times[0].tv_sec = tmp / 10000000ULL;
                times[0].tv_nsec = tmp % 10000000ULL;
+#endif
        }
        if (!lpLastWriteTime)
        {
@@ -400,7 +414,11 @@ static BOOL FileSetFileTime(HANDLE hFile, const FILETIME *lpCreationTime,
                times[1].tv_sec = buf.st_mtime;
                times[1].tv_nsec = buf.st_mtimensec;
 #endif
+#elif ANDROID
+               timevals[1].tv_sec = buf.st_mtime;
+               timevals[1].tv_usec = buf.st_mtimensec / 1000UL;
 #else
+               times[1].tv_sec = UTIME_OMIT;
                times[1].tv_nsec = UTIME_OMIT;
 #endif
        }
@@ -411,13 +429,22 @@ static BOOL FileSetFileTime(HANDLE hFile, const FILETIME *lpCreationTime,
                tmp -= EPOCH_DIFF;
                tmp /= 10ULL;
 
+#ifdef ANDROID
+               tmp /= 10000ULL;
+
+               timevals[1].tv_sec = tmp / 10000ULL;
+               timevals[1].tv_usec = tmp % 10000ULL;
+#else
                times[1].tv_sec = tmp / 10000000ULL;
                times[1].tv_nsec = tmp % 10000000ULL;
+#endif
        }
 
        // TODO: Creation time can not be handled!
 #ifdef __APPLE__
        rc = futimes(fileno(pFile->fp), times);
+#elif ANDROID
+       rc = utimes(pFile->lpFileName, timevals);
 #else
        rc = futimens(fileno(pFile->fp), times);
 #endif