Hello community, here is the log from the commit of package libfilezilla for openSUSE:Factory checked in at 2016-04-28 16:57:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libfilezilla (Old) and /work/SRC/openSUSE:Factory/.libfilezilla.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libfilezilla" Changes: -------- --- /work/SRC/openSUSE:Factory/libfilezilla/libfilezilla.changes 2016-03-26 15:22:47.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.libfilezilla.new/libfilezilla.changes 2016-04-28 17:02:36.000000000 +0200 @@ -1,0 +2,11 @@ +Wed Apr 27 11:53:21 UTC 2016 - joerg.loren...@ki.tng.de + +- Update to version 0.5.0 + - Handle timestamps where midnight is represented as 24:00:00.000 + of the previous day. + - Fix inverted return value of fz::datetime::empty(). + - Increase performance of event loop if not using timers. + - Better compatibility with runtimes that change the src pointer + passed to mbsrtowcs or wcsrtombs. + +------------------------------------------------------------------- Old: ---- libfilezilla-0.4.0.1.tar.bz2 New: ---- libfilezilla-0.5.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libfilezilla.spec ++++++ --- /var/tmp/diff_new_pack.pBIVko/_old 2016-04-28 17:02:38.000000000 +0200 +++ /var/tmp/diff_new_pack.pBIVko/_new 2016-04-28 17:02:38.000000000 +0200 @@ -20,7 +20,7 @@ %define libname %{name}%{major} %define develname %{name}-devel Name: libfilezilla -Version: 0.4.0.1 +Version: 0.5.0 Release: 0 Summary: C++ library for filezilla License: GPL-2.0+ ++++++ libfilezilla-0.4.0.1.tar.bz2 -> libfilezilla-0.5.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/NEWS new/libfilezilla-0.5.0/NEWS --- old/libfilezilla-0.4.0.1/NEWS 2016-02-22 14:42:19.000000000 +0100 +++ new/libfilezilla-0.5.0/NEWS 2016-04-15 09:52:25.000000000 +0200 @@ -1,3 +1,10 @@ +0.5.0 (2016-04-15) + +- Handle timestamps where midnight is represented as 24:00:00.000 of the previous day +- Fix inverted return value of fz::datetime::empty() +- Increase performance of event loop if not using timers +- Better compatibility with runtimes that change the src pointer passed to mbsrtowcs or wcsrtombs + 0.4.0.1 (2016-02-22) - Fix compile error in testcase diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/configure new/libfilezilla-0.5.0/configure --- old/libfilezilla-0.4.0.1/configure 2016-02-22 14:42:38.000000000 +0100 +++ new/libfilezilla-0.5.0/configure 2016-04-15 09:52:38.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libfilezilla 0.4.0.1. +# Generated by GNU Autoconf 2.69 for libfilezilla 0.5.0. # # Report bugs to <tim.ko...@filezilla-project.org>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libfilezilla' PACKAGE_TARNAME='libfilezilla' -PACKAGE_VERSION='0.4.0.1' -PACKAGE_STRING='libfilezilla 0.4.0.1' +PACKAGE_VERSION='0.5.0' +PACKAGE_STRING='libfilezilla 0.5.0' PACKAGE_BUGREPORT='tim.ko...@filezilla-project.org' PACKAGE_URL='https://lib.filezilla-project.org/' @@ -1395,7 +1395,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libfilezilla 0.4.0.1 to adapt to many kinds of systems. +\`configure' configures libfilezilla 0.5.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1465,7 +1465,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libfilezilla 0.4.0.1:";; + short | recursive ) echo "Configuration of libfilezilla 0.5.0:";; esac cat <<\_ACEOF @@ -1589,7 +1589,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libfilezilla configure 0.4.0.1 +libfilezilla configure 0.5.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2034,7 +2034,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libfilezilla $as_me 0.4.0.1, which was +It was created by libfilezilla $as_me 0.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2900,7 +2900,7 @@ # Define the identity of the package. PACKAGE='libfilezilla' - VERSION='0.4.0.1' + VERSION='0.5.0' cat >>confdefs.h <<_ACEOF @@ -19461,7 +19461,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libfilezilla $as_me 0.4.0.1, which was +This file was extended by libfilezilla $as_me 0.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19528,7 +19528,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libfilezilla config.status 0.4.0.1 +libfilezilla config.status 0.5.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/configure.ac new/libfilezilla-0.5.0/configure.ac --- old/libfilezilla-0.4.0.1/configure.ac 2016-02-22 14:42:26.000000000 +0100 +++ new/libfilezilla-0.5.0/configure.ac 2016-04-15 09:52:27.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([libfilezilla],[0.4.0.1],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/]) +AC_INIT([libfilezilla],[0.5.0],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/]) AC_CONFIG_HEADERS([lib/libfilezilla/private/config.hpp]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR(config) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/demos/list.cpp new/libfilezilla-0.5.0/demos/list.cpp --- old/libfilezilla-0.4.0.1/demos/list.cpp 2016-01-31 11:35:01.000000000 +0100 +++ new/libfilezilla-0.5.0/demos/list.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -19,8 +19,7 @@ return 1; } - std::cout << "Listing " << fz::to_string(path) << "\n\n"; - std::cout << "Name Link? Type Size Modified Mode\n"; + std::cout << "Listing " << fz::to_string(path) << "\n"; std::cout << "----------------------------------\n"; fz::native_string name; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/event_loop.cpp new/libfilezilla-0.5.0/lib/event_loop.cpp --- old/libfilezilla-0.4.0.1/lib/event_loop.cpp 2016-01-31 11:35:01.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/event_loop.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -164,9 +164,10 @@ void event_loop::entry() { + monotonic_clock now; + scoped_lock l(sync_); while (!quit_) { - monotonic_clock const now(monotonic_clock::now()); if (process_timers(l, now)) { continue; } @@ -184,10 +185,16 @@ } } -bool event_loop::process_timers(scoped_lock & l, monotonic_clock const& now) +bool event_loop::process_timers(scoped_lock & l, monotonic_clock & now) { - if (!deadline_ || now < deadline_) { - // There's no deadline or deadline has not yet expired + if (!deadline_) { + // There's no deadline + return false; + } + + now = monotonic_clock::now(); + if (now < deadline_) { + // Deadline has not yet expired return false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/iputils.cpp new/libfilezilla-0.5.0/lib/iputils.cpp --- old/libfilezilla-0.4.0.1/lib/iputils.cpp 2016-01-31 11:35:01.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/iputils.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -1,5 +1,7 @@ #include "libfilezilla/iputils.hpp" +#include <stddef.h> + namespace fz { template<typename String, typename Char = typename String::value_type> String do_get_ipv6_long_form(String short_address) @@ -24,13 +26,13 @@ Char* out = buffer; - const unsigned int len = short_address.size(); + const size_t len = short_address.size(); if (len > 39) return String(); // First part, before possible :: - unsigned int i = 0; - unsigned int grouplength = 0; + size_t i = 0; + size_t grouplength = 0; Char const* s = short_address.c_str(); for (i = 0; i < len + 1; ++i) { @@ -46,7 +48,7 @@ } out += 4 - grouplength; - for (unsigned int j = grouplength; j > 0; --j) { + for (size_t j = grouplength; j > 0; --j) { *out++ = s[i - j]; } // End of string... @@ -89,7 +91,7 @@ Char* end_first = out; out = &buffer[38]; - unsigned int stop = i; + size_t stop = i; for (i = len - 1; i > stop; --i) { if (out < end_first) { // Too long @@ -127,7 +129,7 @@ out -= 5 - grouplength; out += 2; - int diff = out - end_first; + ptrdiff_t diff = out - end_first; if (diff < 0 || diff % 5) { return String(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/libfilezilla/event_loop.hpp new/libfilezilla-0.5.0/lib/libfilezilla/event_loop.hpp --- old/libfilezilla-0.4.0.1/lib/libfilezilla/event_loop.hpp 2015-11-02 14:47:31.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/libfilezilla/event_loop.hpp 2016-04-15 09:52:15.000000000 +0200 @@ -74,7 +74,7 @@ bool FZ_PRIVATE_SYMBOL process_event(scoped_lock & l); // Process timers. Returns true if a timer has been triggered - bool FZ_PRIVATE_SYMBOL process_timers(scoped_lock & l, monotonic_clock const& now); + bool FZ_PRIVATE_SYMBOL process_timers(scoped_lock & l, monotonic_clock& now); virtual void FZ_PRIVATE_SYMBOL entry(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/libfilezilla/version.hpp new/libfilezilla-0.5.0/lib/libfilezilla/version.hpp --- old/libfilezilla-0.4.0.1/lib/libfilezilla/version.hpp 2016-02-22 14:42:40.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/libfilezilla/version.hpp 2016-04-15 09:52:56.000000000 +0200 @@ -9,15 +9,15 @@ #include <tuple> /// \brief Version string of the libfilezilla headers -#define LIBFILEZILLA_VERSION "0.4.0.1" +#define LIBFILEZILLA_VERSION "0.5.0" #define LIBFILEZILLA_VERSION_MAJOR 0 -#define LIBFILEZILLA_VERSION_MINOR 4 +#define LIBFILEZILLA_VERSION_MINOR 5 #define LIBFILEZILLA_VERSION_MICRO 0 -#define LIBFILEZILLA_VERSION_NANO 1 +#define LIBFILEZILLA_VERSION_NANO 0 /// \brief Suffix string, e.g. "rc1" -#define LIBFILEZILLA_VERSION_SUFFIX "0.4.0.1" +#define LIBFILEZILLA_VERSION_SUFFIX "0.5.0" namespace fz { /// \brief Get version string of libfilezilla diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/local_filesys.cpp new/libfilezilla-0.5.0/lib/local_filesys.cpp --- old/libfilezilla-0.4.0.1/lib/local_filesys.cpp 2015-11-19 14:20:07.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/local_filesys.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -162,7 +162,7 @@ if (modification_time) { *modification_time = datetime(attributes.ftLastWriteTime, datetime::milliseconds); - if (!modification_time->empty()) { + if (modification_time->empty()) { *modification_time = datetime(attributes.ftCreationTime, datetime::milliseconds); } } @@ -399,7 +399,7 @@ if (modification_time) { *modification_time = datetime(info.ftLastWriteTime, datetime::milliseconds); - if (!modification_time->empty()) { + if (modification_time->empty()) { *modification_time = datetime(info.ftCreationTime, datetime::milliseconds); } } @@ -436,7 +436,7 @@ else { if (modification_time) { *modification_time = datetime(m_find_data.ftLastWriteTime, datetime::milliseconds); - if (!modification_time->empty()) { + if (modification_time->empty()) { *modification_time = datetime(m_find_data.ftLastWriteTime, datetime::milliseconds); } } @@ -550,7 +550,7 @@ bool local_filesys::set_modification_time(native_string const& path, datetime const& t) { - if (!t.empty()) + if (t.empty()) return false; #ifdef FZ_WINDOWS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/string.cpp new/libfilezilla-0.5.0/lib/string.cpp --- old/libfilezilla-0.4.0.1/lib/string.cpp 2015-11-19 14:20:07.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/string.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -81,7 +81,8 @@ ret.resize(len); wchar_t* out_p = &ret[0]; - std::mbsrtowcs(out_p, &in_p, len + 1, &ps); + in_p = in.c_str(); // Some implementations of mbsrtowcs change src even on null dst + len = std::mbsrtowcs(out_p, &in_p, len + 1, &ps); } return ret; @@ -139,6 +140,7 @@ ret.resize(len); char* out_p = &ret[0]; + in_p = in.c_str(); // Some implementations of wcsrtombs change src even on null dst std::wcsrtombs(out_p, &in_p, len + 1, &ps); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/lib/time.cpp new/libfilezilla-0.5.0/lib/time.cpp --- old/libfilezilla-0.4.0.1/lib/time.cpp 2015-11-02 14:47:31.000000000 +0100 +++ new/libfilezilla-0.5.0/lib/time.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -321,7 +321,7 @@ datetime& datetime::operator+=(duration const& op) { - if (empty()) { + if (!empty()) { if (a_ < hours) { t_ += op.get_days() * 24 * 3600 * 1000; } @@ -420,12 +420,11 @@ #ifdef FZ_WINDOWS -bool datetime::set(SYSTEMTIME const& st, accuracy a, zone z) +namespace { +bool do_set(datetime & dt, SYSTEMTIME const& st, datetime::accuracy a, datetime::zone z) { - clear(); - FILETIME ft{}; - if (a >= hours && z == local) { + if (a >= datetime::hours && z == datetime::local) { SYSTEMTIME st2{}; if (!TzSpecificLocalTimeToSystemTime(0, &st, &st2)) { return false; @@ -437,7 +436,30 @@ else if (!SystemTimeToFileTime(&st, &ft)) { return false; } - return set(ft, a); + return dt.set(ft, a); +} +} + +bool datetime::set(SYSTEMTIME const& st, accuracy a, zone z) +{ + clear(); + + bool success = do_set(*this, st, a, z); + if (!success) { + // Check for alternate midnight format + if (st.wHour == 24 && !st.wMinute && !st.wSecond && !st.wMilliseconds) { + SYSTEMTIME st2 = st; + st2.wHour = 23; + st2.wMinute = 59; + st2.wSecond = 59; + st2.wMilliseconds = 999; + success = do_set(*this, st2, a, z); + if (success) { + t_ += 1; + } + } + } + return success; } namespace { @@ -503,7 +525,7 @@ bool datetime::imbue_time(int hour, int minute, int second, int millisecond) { - if (!empty() || a_ > days) { + if (empty() || a_ > days) { return false; } @@ -521,7 +543,10 @@ } if (hour < 0 || hour >= 24) { - return false; + // Allow alternate midnight representation + if (hour != 24 || minute != 0 || second != 0 || millisecond != 0) { + return false; + } } if (minute < 0 || minute >= 60) { return false; @@ -539,7 +564,7 @@ bool datetime::empty() const { - return t_ != invalid; + return t_ == invalid; } void datetime::clear() @@ -729,7 +754,7 @@ FILETIME datetime::get_filetime() const { FILETIME ret{}; - if (empty()) { + if (!empty()) { int64_t t = t_; t += EPOCH_OFFSET_IN_MSEC; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.4.0.1/tests/time.cpp new/libfilezilla-0.5.0/tests/time.cpp --- old/libfilezilla-0.4.0.1/tests/time.cpp 2015-11-02 14:47:31.000000000 +0100 +++ new/libfilezilla-0.5.0/tests/time.cpp 2016-04-15 09:52:15.000000000 +0200 @@ -10,6 +10,7 @@ CPPUNIT_TEST_SUITE(TimeTest); CPPUNIT_TEST(testNow); CPPUNIT_TEST(testPreEpoch); + CPPUNIT_TEST(testAlternateMidnight); CPPUNIT_TEST_SUITE_END(); public: @@ -18,6 +19,8 @@ void testNow(); void testPreEpoch(); + + void testAlternateMidnight(); }; CPPUNIT_TEST_SUITE_REGISTRATION(TimeTest); @@ -30,8 +33,8 @@ fz::datetime const t2 = fz::datetime::now(); - CPPUNIT_ASSERT(t1.empty()); - CPPUNIT_ASSERT(t2.empty()); + CPPUNIT_ASSERT(!t1.empty()); + CPPUNIT_ASSERT(!t2.empty()); CPPUNIT_ASSERT(t2 > t1); auto const diff = t2 - t1; @@ -48,7 +51,7 @@ fz::datetime const t1(fz::datetime::utc, 1957, 10, 4, 19, 28, 34); - CPPUNIT_ASSERT(t1.empty()); + CPPUNIT_ASSERT(!t1.empty()); CPPUNIT_ASSERT(t1 < now); CPPUNIT_ASSERT(t1.get_time_t() < -1); @@ -64,7 +67,7 @@ fz::datetime const t2(fz::datetime::utc, 1969, 12, 31, 23, 59, 59); - CPPUNIT_ASSERT(t2.empty()); + CPPUNIT_ASSERT(!t2.empty()); CPPUNIT_ASSERT(t2 > t1); CPPUNIT_ASSERT(t2 < now); @@ -76,3 +79,25 @@ CPPUNIT_ASSERT_EQUAL(59, tm2.tm_min); CPPUNIT_ASSERT_EQUAL(59, tm2.tm_sec); } + +void TimeTest::testAlternateMidnight() +{ + fz::datetime const t1(fz::datetime::utc, 2016, 4, 13, 0, 0, 0); + fz::datetime const t2(fz::datetime::utc, 2016, 4, 12, 24, 0, 0); + fz::datetime const t3("2016-04-13 00:00:00", fz::datetime::utc); + fz::datetime const t4("2016-04-12 24:00:00", fz::datetime::utc); + + CPPUNIT_ASSERT(!t1.empty()); + CPPUNIT_ASSERT(!t2.empty()); + CPPUNIT_ASSERT(!t3.empty()); + CPPUNIT_ASSERT(!t4.empty()); + + CPPUNIT_ASSERT(t1 == t2); + CPPUNIT_ASSERT(t1 == t3); + CPPUNIT_ASSERT(t1 == t4); + + fz::datetime imbue("2016-04-12", fz::datetime::utc); + CPPUNIT_ASSERT(imbue.imbue_time(24, 0, 0)); + CPPUNIT_ASSERT(t1 == imbue); + +}