Patrick,

Ok, I've added some changes to my branch and will push shortly.  One
remaining issue is the boost::variant for Params.  If I add int, or
any of the other plain data types I get errors like this:
        ln -s src/backends/webdav/syncevo-webdav-lookup.sh
src/backends/webdav/syncevo-webdav-lookup
/bin/bash ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H
-I.  -I/home/chaiwala/devel/syncevolution/src -I./src/gdbusxx -I./test
-I/usr/include    -pthread -I/usr/include/gnome-keyring-1
-I/usr/include/libxml2 -I/usr/include/libsoup-2.4
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
-I/usr/include/nss -I/usr/include/nspr
-I/usr/include/evolution-data-server-3.6   -pthread
-I/usr/include/gnome-keyring-1 -I/usr/include/libxml2
-I/usr/include/libsoup-2.4 -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/nss
-I/usr/include/nspr -I/usr/include/evolution-data-server-3.6
-pthread -I/usr/include/nss -I/usr/include/nspr
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
-I/usr/include/gnome-keyring-1 -I/usr/include/libxml2
-I/usr/include/libsoup-2.4 -I/usr/include/evolution-data-server-3.6
    -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
  -pthread -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include   -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include     -Wall
-Wno-unknown-pragmas -Wno-deprecated-declarations -pthread
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
-g -O2 -MT src/backends/pbap/src_backends_pbap_syncpbap_la-PbapSyncSource.lo
-MD -MP -MF 
src/backends/pbap/.deps/src_backends_pbap_syncpbap_la-PbapSyncSource.Tpo
-c -o src/backends/pbap/src_backends_pbap_syncpbap_la-PbapSyncSource.lo
`test -f 'src/backends/pbap/PbapSyncSource.cpp' || echo
'./'`src/backends/pbap/PbapSyncSource.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I.
-I/home/chaiwala/devel/syncevolution/src -I./src/gdbusxx -I./test
-I/usr/include -pthread -I/usr/include/gnome-keyring-1
-I/usr/include/libxml2 -I/usr/include/libsoup-2.4
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
-I/usr/include/nss -I/usr/include/nspr
-I/usr/include/evolution-data-server-3.6 -pthread
-I/usr/include/gnome-keyring-1 -I/usr/include/libxml2
-I/usr/include/libsoup-2.4 -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/nss
-I/usr/include/nspr -I/usr/include/evolution-data-server-3.6 -pthread
-I/usr/include/nss -I/usr/include/nspr -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include
-I/usr/include/gnome-keyring-1 -I/usr/include/libxml2
-I/usr/include/libsoup-2.4 -I/usr/include/evolution-data-server-3.6
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
-pthread -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -Wall -Wno-unknown-pragmas
-Wno-deprecated-declarations -pthread -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -g -O2 -MT
src/backends/pbap/src_backends_pbap_syncpbap_la-PbapSyncSource.lo -MD
-MP -MF src/backends/pbap/.deps/src_backends_pbap_syncpbap_la-PbapSyncSource.Tpo
-c src/backends/pbap/PbapSyncSource.cpp  -fPIC -DPIC -o
src/backends/pbap/.libs/src_backends_pbap_syncpbap_la-PbapSyncSource.o
In file included from src/backends/pbap/PbapSyncSource.cpp:45:0:
./src/gdbusxx/gdbus-cxx-bridge.h: In static member function 'static
void GDBusCXX::dbus_traits<std::map<K, V, C>
>::append(GVariantBuilder&, GDBusCXX::dbus_traits<std::map<K, V, C>
>::arg_type) [with K = std::basic_string<char>, V =
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>,
C = std::less<std::basic_string<char> >, GVariantBuilder =
_GVariantBuilder, GDBusCXX::dbus_traits<std::map<K, V, C> >::arg_type
= const std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>&, GDBusCXX::dbus_traits<std::map<K, V, C> >::host_type =
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>]':
./src/gdbusxx/gdbus-cxx-bridge.h:339:9:   instantiated from
'GDBusCXX::AppendRetvals& GDBusCXX::AppendRetvals::operator<<(const
A&) [with A = std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>, GDBusCXX::AppendRetvals = GDBusCXX::AppendRetvals]'
./src/gdbusxx/gdbus-cxx-bridge.h:4404:9:   instantiated from
'GDBusCXX::DBusClientCall<CallTraits>::Return_t
GDBusCXX::DBusClientCall<CallTraits>::operator()(const A1&, const A2&)
[with A1 = std::basic_string<char>, A2 =
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>, CallTraits = GDBusCXX::Ret1Traits<GDBusCXX::DBusObject_t>,
GDBusCXX::DBusClientCall<CallTraits>::Return_t =
GDBusCXX::DBusObject_t]'
src/backends/pbap/PbapSyncSource.cpp:163:48:   instantiated from here
./src/gdbusxx/gdbus-cxx-bridge.h:1718:13: error: 'append' is not a
member of 'GDBusCXX::dbus_traits<boost::variant<std::basic_string<char>,
GDBusCXX::DBusObject_t, int> >'
./src/gdbusxx/gdbus-cxx-bridge.h: In static member function 'static
std::string GDBusCXX::dbus_traits<std::map<K, V, C>
>::getContainedType() [with K = std::basic_string<char>, V =
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>,
C = std::less<std::basic_string<char> >, std::string =
std::basic_string<char>]':
./src/gdbusxx/gdbus-cxx-bridge.h:1716:13:   instantiated from 'static
void GDBusCXX::dbus_traits<std::map<K, V, C>
>::append(GVariantBuilder&, GDBusCXX::dbus_traits<std::map<K, V, C>
>::arg_type) [with K = std::basic_string<char>, V =
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>,
C = std::less<std::basic_string<char> >, GVariantBuilder =
_GVariantBuilder, GDBusCXX::dbus_traits<std::map<K, V, C> >::arg_type
= const std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>&, GDBusCXX::dbus_traits<std::map<K, V, C> >::host_type =
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>]'
./src/gdbusxx/gdbus-cxx-bridge.h:339:9:   instantiated from
'GDBusCXX::AppendRetvals& GDBusCXX::AppendRetvals::operator<<(const
A&) [with A = std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>, GDBusCXX::AppendRetvals = GDBusCXX::AppendRetvals]'
./src/gdbusxx/gdbus-cxx-bridge.h:4404:9:   instantiated from
'GDBusCXX::DBusClientCall<CallTraits>::Return_t
GDBusCXX::DBusClientCall<CallTraits>::operator()(const A1&, const A2&)
[with A1 = std::basic_string<char>, A2 =
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>, CallTraits = GDBusCXX::Ret1Traits<GDBusCXX::DBusObject_t>,
GDBusCXX::DBusClientCall<CallTraits>::Return_t =
GDBusCXX::DBusObject_t]'
src/backends/pbap/PbapSyncSource.cpp:163:48:   instantiated from here
./src/gdbusxx/gdbus-cxx-bridge.h:1673:13: error: 'getType' is not a
member of 'GDBusCXX::dbus_traits<boost::variant<std::basic_string<char>,
GDBusCXX::DBusObject_t, int> >'
./src/gdbusxx/gdbus-cxx-bridge.h: In static member function 'static
void GDBusCXX::dbus_traits<std::map<K, V, C>
>::get(GDBusCXX::ExtractArgs&, GVariantIter&,
GDBusCXX::dbus_traits<std::map<K, V, C> >::host_type&) [with K =
std::basic_string<char>, V = boost::variant<std::basic_string<char>,
GDBusCXX::DBusObject_t, int>, C = std::less<std::basic_string<char> >,
GVariantIter = _GVariantIter, GDBusCXX::dbus_traits<std::map<K, V, C>
>::host_type = std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>]':
./src/gdbusxx/gdbus-cxx-bridge.h:1580:9:   instantiated from 'static
void GDBusCXX::dbus_traits<std::pair<_T1, _T2>
>::get(GDBusCXX::ExtractArgs&, GVariantIter&,
GDBusCXX::dbus_traits<std::pair<_T1, _T2> >::host_type&) [with A =
GDBusCXX::DBusObject_t, B = std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>
>, GVariantIter = _GVariantIter, GDBusCXX::dbus_traits<std::pair<_T1,
_T2> >::host_type = std::pair<GDBusCXX::DBusObject_t,
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>]'
./src/gdbusxx/gdbus-cxx-bridge.h:467:9:   instantiated from
'GDBusCXX::ExtractArgs& GDBusCXX::Get<A>::get(GDBusCXX::ExtractArgs&)
const [with A = std::pair<GDBusCXX::DBusObject_t,
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>]'
./src/gdbusxx/gdbus-cxx-bridge.h:457:27:   instantiated from
'GDBusCXX::ExtractArgs& GDBusCXX::ExtractArgs::operator>>(const A&)
[with A = GDBusCXX::Get<std::pair<GDBusCXX::DBusObject_t,
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
> >, GDBusCXX::ExtractArgs = GDBusCXX::ExtractArgs]'
./src/gdbusxx/gdbus-cxx-bridge.h:4176:9:   instantiated from 'static
GDBusCXX::Ret1Traits<R1>::Return_t
GDBusCXX::Ret1Traits<R1>::demarshal(GDBusCXX::DBusMessagePtr&, const
GDBusCXX::DBusConnectionPtr&) [with R1 =
std::pair<GDBusCXX::DBusObject_t, std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>, GDBusCXX::Ret1Traits<R1>::Return_t =
std::pair<GDBusCXX::DBusObject_t, std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>]'
./src/gdbusxx/gdbus-cxx-bridge.h:4351:51:   instantiated from
'GDBusCXX::DBusClientCall<CallTraits>::Return_t
GDBusCXX::DBusClientCall<CallTraits>::sendAndReturn(GDBusCXX::DBusMessagePtr&)
[with CallTraits =
GDBusCXX::Ret1Traits<std::pair<GDBusCXX::DBusObject_t,
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
> >, GDBusCXX::DBusClientCall<CallTraits>::Return_t =
std::pair<GDBusCXX::DBusObject_t, std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>]'
./src/gdbusxx/gdbus-cxx-bridge.h:4387:33:   instantiated from
'GDBusCXX::DBusClientCall<CallTraits>::Return_t
GDBusCXX::DBusClientCall<CallTraits>::operator()(const A1&) [with A1 =
std::basic_string<char>, CallTraits =
GDBusCXX::Ret1Traits<std::pair<GDBusCXX::DBusObject_t,
std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
> >, GDBusCXX::DBusClientCall<CallTraits>::Return_t =
std::pair<GDBusCXX::DBusObject_t, std::map<std::basic_string<char>,
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int> >
>]'
src/backends/pbap/PbapSyncSource.cpp:256:88:   instantiated from here
./src/gdbusxx/gdbus-cxx-bridge.h:1702:13: error: 'get' is not a member
of 'GDBusCXX::dbus_traits<boost::variant<std::basic_string<char>,
GDBusCXX::DBusObject_t, int> >'
In file included from src/backends/pbap/PbapSyncSource.cpp:447:0:
./src/gdbusxx/gdbus-cxx-bridge.h: In static member function 'static
std::string GDBusCXX::dbus_traits<std::map<K, V, C>
>::getContainedType() [with K = std::basic_string<char>, V =
boost::variant<std::basic_string<char>, GDBusCXX::DBusObject_t, int>,
C = std::less<std::basic_string<char> >, std::string =
std::basic_string<char>]':
./src/gdbusxx/gdbus-cxx-bridge.h:1674:5: warning: control reaches end
of non-void function [-Wreturn-type]
make[2]: *** [src/backends/pbap/src_backends_pbap_syncpbap_la-PbapSyncSource.lo]
Error 1
make[2]: Leaving directory `/home/chaiwala/devel/syncevolution'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/chaiwala/devel/syncevolution'
make: *** [all] Error 2

One other issue is that you mentioned I need to unmap the file
somehow, when should that happen? I would think only on destruction
since we are using StringPiece's from it until that point, right?

thanks,
Jeremy

On Fri, Sep 21, 2012 at 2:06 PM, Patrick Ohly <patrick.o...@intel.com> wrote:
> Hello Jeremy!
>
> Here my comments for the code that you pushed yesterday.
>
> Your latest code revision still creates string copies instead of just
> splitting up the memory mapped file:
>
> commit dcd892e84a630c394f9f3ac4615bed09d8c6bede
> Author: Jeremy Whiting <jeremy.whit...@collabora.com>
> Date:   Fri Aug 31 18:18:01 2012 -0600
>
>     PBAP: Fix vcard parsing regexp so all vcards are parsed.
>
> diff --git a/src/backends/pbap/PbapSyncSource.cpp
> b/src/backends/pbap/PbapSyncSource.cpp
> index b854633..d39dbec 100644
> --- a/src/backends/pbap/PbapSyncSource.cpp
> +++ b/src/backends/pbap/PbapSyncSource.cpp
> @@ -280,13 +280,13 @@ void PbapSession::pullAll(Content &dst)
>
>          pcrecpp::StringPiece content(addr, sb.st_size);
>
> -        string vcarddata;
> +        pcrecpp::StringPiece vcarddata;
>          int count = 0;
> -        pcrecpp::RE re("(^BEGIN:VCARD.*?^END:VCARD)",
> +        pcrecpp::RE re("[\\r\\n]*(^BEGIN:VCARD.*?^END:VCARD)",
>
> pcrecpp::RE_Options().set_dotall(true).set_multiline(true));
>          while (re.Consume(&content, &vcarddata)) {
>              std::string id = StringPrintf("%d", count);
> -            dst[id] = vcarddata;
> +            dst[id] = vcarddata.as_string();
>                        ^^^^^^^^^^^^^^^^^^^^^^
>
> I still think it would be better to rearrange the class so that dst maps
> from id to a StringPiece, with the actual memory owned by the class
> (either in the memory mapped area or in a std::string buffer).
>
> The parsing code should be identical for both code paths.
>
> Unmapping the memory mapped file is missing.
>
> The comment for the commit should describe the commit in enough detail
> that a reader of the commit log knows how this new functionality works
> (key points: dynamic runtime check, tries new API first), and what the
> limitations/requirements are (needs D-Bus daemon >= xxx - forgot the
> exact number).
>
> It only works as long as obexd only sends strings as property values.
> This is not guaranteed. As I said earlier, "Instead we need a
> boost::variant<std::string, GDBusCXX::DBusObject_t,
> int, bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t,
> uint64_t> as value for the map".
>
> This should be added to the commit messages and as bug entry in the
> issue tracker, otherwise there is a high risk that it'll get into a
> release without fixing it. Heck, I probably should insist on it getting
> fixed before merging into master :-/
>
> I'd prefer to merge one patch for the PBAP backend. Feel free to squash
> your and my commits into one.
>
> --
> Best Regards, Patrick Ohly
>
> The content of this message is my personal opinion only and although
> I am an employee of Intel, the statements I make here in no way
> represent Intel's position on the issue, nor am I authorized to speak
> on behalf of Intel on this matter.
>
>
_______________________________________________
SyncEvolution mailing list
SyncEvolution@syncevolution.org
http://lists.syncevolution.org/listinfo/syncevolution

Reply via email to