Loading include/utils/ZipFileRO.h +15 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> namespace android { Loading Loading @@ -173,6 +174,20 @@ public: static bool inflateBuffer(int fd, const void* inBuf, size_t uncompLen, size_t compLen); /* * Utility function to convert ZIP's time format to a timespec struct. */ static inline void zipTimeToTimespec(long when, struct tm* timespec) { const long date = when >> 16; timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980 timespec->tm_mon = (date >> 5) & 0x0F; timespec->tm_mday = date & 0x1F; timespec->tm_hour = (when >> 11) & 0x1F; timespec->tm_min = (when >> 5) & 0x3F; timespec->tm_sec = (when & 0x1F) << 1; } /* * Some basic functions for raw data manipulation. "LE" means * Little Endian. Loading libs/utils/tests/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,8 @@ test_src_files := \ ObbFile_test.cpp \ Looper_test.cpp \ String8_test.cpp \ Unicode_test.cpp Unicode_test.cpp \ ZipFileRO_test.cpp \ shared_libraries := \ libz \ Loading libs/utils/tests/ZipFileRO_test.cpp 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed 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. */ #define LOG_TAG "ZipFileRO_test" #include <utils/Log.h> #include <utils/ZipFileRO.h> #include <gtest/gtest.h> #include <fcntl.h> #include <string.h> namespace android { class ZipFileROTest : public testing::Test { protected: virtual void SetUp() { } virtual void TearDown() { } }; TEST_F(ZipFileROTest, ZipTimeConvertSuccess) { struct tm t; // 2011-06-29 14:40:40 long when = 0x3EDD7514; ZipFileRO::zipTimeToTimespec(when, &t); EXPECT_EQ(2011, t.tm_year + 1900) << "Year was improperly converted."; EXPECT_EQ(6, t.tm_mon) << "Month was improperly converted."; EXPECT_EQ(29, t.tm_mday) << "Day was improperly converted."; EXPECT_EQ(14, t.tm_hour) << "Hour was improperly converted."; EXPECT_EQ(40, t.tm_min) << "Minute was improperly converted."; EXPECT_EQ(40, t.tm_sec) << "Second was improperly converted."; } } Loading
include/utils/ZipFileRO.h +15 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> namespace android { Loading Loading @@ -173,6 +174,20 @@ public: static bool inflateBuffer(int fd, const void* inBuf, size_t uncompLen, size_t compLen); /* * Utility function to convert ZIP's time format to a timespec struct. */ static inline void zipTimeToTimespec(long when, struct tm* timespec) { const long date = when >> 16; timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980 timespec->tm_mon = (date >> 5) & 0x0F; timespec->tm_mday = date & 0x1F; timespec->tm_hour = (when >> 11) & 0x1F; timespec->tm_min = (when >> 5) & 0x3F; timespec->tm_sec = (when & 0x1F) << 1; } /* * Some basic functions for raw data manipulation. "LE" means * Little Endian. Loading
libs/utils/tests/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,8 @@ test_src_files := \ ObbFile_test.cpp \ Looper_test.cpp \ String8_test.cpp \ Unicode_test.cpp Unicode_test.cpp \ ZipFileRO_test.cpp \ shared_libraries := \ libz \ Loading
libs/utils/tests/ZipFileRO_test.cpp 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed 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. */ #define LOG_TAG "ZipFileRO_test" #include <utils/Log.h> #include <utils/ZipFileRO.h> #include <gtest/gtest.h> #include <fcntl.h> #include <string.h> namespace android { class ZipFileROTest : public testing::Test { protected: virtual void SetUp() { } virtual void TearDown() { } }; TEST_F(ZipFileROTest, ZipTimeConvertSuccess) { struct tm t; // 2011-06-29 14:40:40 long when = 0x3EDD7514; ZipFileRO::zipTimeToTimespec(when, &t); EXPECT_EQ(2011, t.tm_year + 1900) << "Year was improperly converted."; EXPECT_EQ(6, t.tm_mon) << "Month was improperly converted."; EXPECT_EQ(29, t.tm_mday) << "Day was improperly converted."; EXPECT_EQ(14, t.tm_hour) << "Hour was improperly converted."; EXPECT_EQ(40, t.tm_min) << "Minute was improperly converted."; EXPECT_EQ(40, t.tm_sec) << "Second was improperly converted."; } }