[Spice-devel] [PATCH 1/3] plugin: try to run /usr/libexec/spice-xpi-client first

Marc-André Lureau marcandre.lureau at gmail.com
Wed Sep 28 06:13:31 PDT 2011


Although not really important, the previous code was racy (stat + exec).

I propose running /usr/libexec/spice-xpi-client without parameters,
which could be a shell script with the required arguments to call
spicec or other spice clients (and could be easily tweaked to run
various clients depending on environment etc..)

Ex:
exec spicec --controller "$@"
---
 SpiceXPI/src/plugin/plugin.cpp |   33 ++++++---------------------------
 1 files changed, 6 insertions(+), 27 deletions(-)

diff --git a/SpiceXPI/src/plugin/plugin.cpp b/SpiceXPI/src/plugin/plugin.cpp
index 793f2ba..f6c168f 100644
--- a/SpiceXPI/src/plugin/plugin.cpp
+++ b/SpiceXPI/src/plugin/plugin.cpp
@@ -105,23 +105,6 @@ namespace {
 
         return dest;
     }
-
-    std::string getSpicecPath()
-    {
-        std::set<std::string> names;
-        names.insert("/usr/libexec/spicec");
-        names.insert("/usr/bin/spicec");
-
-        struct stat file;
-        std::set<std::string>::iterator it;
-        for (it = names.begin(); it != names.end(); ++it)
-        {
-            if (stat(it->c_str(), &file) == 0)
-                return *it;
-        }
-
-        return std::string();
-    }
 }
 
 char *NPP_GetMIMEDescription(void)
@@ -564,18 +547,14 @@ void nsPluginInstance::Connect()
     LOG_DEBUG(" m_child_pid = " << m_child_pid);
     if (m_child_pid == 0)
     {
-        std::string spicec_path = getSpicecPath();
-        if (spicec_path.empty())
-        {
-            LOG_ERROR("ERROR failed to find spicec to run");
-            exit(1);
-        }
+        execl("/usr/libexec/spice-xpi-client", "/usr/libexec/spice-xpi-client", NULL);
+        LOG_ERROR("ERROR failed to run spice-xpi-client");
 
-        // run the controller
-        execl(spicec_path.c_str(), spicec_path.c_str(), "--controller", NULL);
+        // TODO: temporary fallback for backward compatibility
+        execl("/usr/bin/spicec", "/usr/bin/spicec", "--controller", NULL);
+        LOG_ERROR("ERROR failed to run spicec fallback");
 
-        // failed to connect?
-        exit(0);
+        exit(1);
     }
     else
     {
-- 
1.7.6.2



More information about the Spice-devel mailing list