[Spice-devel] spice-xpi
Peter Hatina
phatina at redhat.com
Tue Mar 20 04:16:21 PDT 2012
On 03/15/2012 02:48 PM, Marc-André Lureau wrote:
> Peter,
>
> To resume the discussion and be a bit more specific:
>
>> +#if __GNUC__
>> +static inline std::string pretty_func_to_func_name(const std::string& f_name)
>> +{
>> + std::string name(f_name);
>> + std::string::size_type end_pos = f_name.find('(');
>> + if (end_pos == std::string::npos)
>> + return f_name;
>> +
>> + std::string::size_type start = f_name.rfind(' ', end_pos);
>> + if (start == std::string::npos)
>> + return f_name;
>> +
>> + end_pos -= ++start;
>> + return name.substr(start, end_pos);
>> +}
>> +# define FUNC_NAME pretty_func_to_func_name(__PRETTY_FUNCTION__).c_str()
>> +#else
>> +# define FUNC_NAME __FUNCTION__
>> +#endif
>
> why not use only __FUNCTION__?
>
Because, it does not format the string to meet this pattern for classes:
"class::method". What I get is only the method name, which is not enough
in this case.
>>> - execl("/usr/libexec/spice-xpi-client", "/usr/libexec/spice-xpi-client", NULL);
>>> - g_message("failed to run spice-xpi-client, running spicec instead");
>>> + char *spice_xpi_client_args[] = {
>>> + const_cast<char*>("/usr/libexec/spice-xpi-client"),
>>> + NULL
>>> + };
>>> + std::stringstream ss;
>>> + int cnt = sizeof(spice_xpi_client_args) / sizeof(spice_xpi_client_args[0]);
>>> + for (int i = 0; i < cnt; ++i)
>>> + ss << spice_xpi_client_args[i] << " ";
>>> + LOG_MESSAGE("Launching " << ss.str());
>>> + execv(spice_xpi_client_args[0], spice_xpi_client_args);
>>> + LOG_MESSAGE("failed to run spice-xpi-client, running spicec instead");
>
> This change is quite intrusive and ugly imho, especially because you
> do it at least twice (here, +more for usb elsewhere).
>
It depends. I wanted to easily dump the parameters, which are passed to
the process - I wanted to avoid copying the same thing twice.
> Can't you define a exec helper instead, using a ostream operator<< for
> logging argv would be a plus, for instance.
>
>> /* attribute string Title; */
>> char *nsPluginInstance::GetTitle() const
>> {
>> + std::string title(m_title);
>> + size_t found = -2;
>> + while ((found = title.find("%", found + 2)) != std::string::npos)
>> + title.replace(found, 1, "%%");
>> + LOG_DEBUG(title);
>> return stringCopy(m_title);
>> }
>
> Hmm, I think I understand why you did this, because we use C
> printf-like g_log functions in the end, but we can't add use
> LOG_DEBUG("%s", title) sadly.
>
Yes, exactly!
> Maybe the g_log functions should be called like g_debug("%s", msg)
> instead, since they are not doing the formating anyway?
>
> thanks!
>
--
Peter Hatina
EMEA ENG-Desktop Development
Red Hat Czech, Brno
More information about the Spice-devel
mailing list