forked from enlightenment/enlightenment
dbus OpenDirectory() proper path handling if using URI.
A path provided with URI will use URI escaping code and we must handle that. SVN revision: 73290
This commit is contained in:
parent
253743b31f
commit
cb257574db
|
@ -63,13 +63,13 @@ _e_fileman_dbus_daemon_free(E_Fileman_DBus_Daemon *d)
|
||||||
free(d);
|
free(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBusMessage *
|
static DBusMessage *
|
||||||
_e_fileman_dbus_daemon_open_directory_cb(E_DBus_Object *obj __UNUSED__,
|
_e_fileman_dbus_daemon_open_directory_cb(E_DBus_Object *obj __UNUSED__,
|
||||||
DBusMessage *message)
|
DBusMessage *message)
|
||||||
{
|
{
|
||||||
DBusMessageIter itr;
|
DBusMessageIter itr;
|
||||||
const char *directory = NULL, *p;
|
const char *directory = NULL, *p;
|
||||||
char *dev;
|
char *dev, *to_free = NULL;
|
||||||
E_Zone *zone;
|
E_Zone *zone;
|
||||||
|
|
||||||
dbus_message_iter_init(message, &itr);
|
dbus_message_iter_init(message, &itr);
|
||||||
|
@ -78,13 +78,26 @@ _e_fileman_dbus_daemon_open_directory_cb(E_DBus_Object *obj __UNUSED__,
|
||||||
if ((!directory) || (directory[0] == '\0'))
|
if ((!directory) || (directory[0] == '\0'))
|
||||||
return _e_fileman_dbus_daemon_error(message, "no directory provided.");
|
return _e_fileman_dbus_daemon_error(message, "no directory provided.");
|
||||||
|
|
||||||
if (strncmp(directory, "file://", sizeof("file://") - 1) == 0)
|
|
||||||
directory += sizeof("file://") - 1;
|
|
||||||
|
|
||||||
zone = e_util_zone_current_get(e_manager_current_get());
|
zone = e_util_zone_current_get(e_manager_current_get());
|
||||||
if (!zone)
|
if (!zone)
|
||||||
return _e_fileman_dbus_daemon_error(message, "could not find a zone.");
|
return _e_fileman_dbus_daemon_error(message, "could not find a zone.");
|
||||||
|
|
||||||
|
if (strstr(directory, "://"))
|
||||||
|
{
|
||||||
|
Efreet_Uri *uri = efreet_uri_decode(directory);
|
||||||
|
|
||||||
|
directory = NULL;
|
||||||
|
if (uri)
|
||||||
|
{
|
||||||
|
if ((uri->protocol) && (strcmp(uri->protocol, "file") == 0))
|
||||||
|
directory = to_free = strdup(uri->path);
|
||||||
|
efreet_uri_free(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!directory)
|
||||||
|
return _e_fileman_dbus_daemon_error(message, "unsupported protocol");
|
||||||
|
}
|
||||||
|
|
||||||
p = strchr(directory, '/');
|
p = strchr(directory, '/');
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
|
@ -92,8 +105,11 @@ _e_fileman_dbus_daemon_open_directory_cb(E_DBus_Object *obj __UNUSED__,
|
||||||
|
|
||||||
dev = malloc(len + 1);
|
dev = malloc(len + 1);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return _e_fileman_dbus_daemon_error
|
{
|
||||||
(message, "could not allocate memory.");
|
free(to_free);
|
||||||
|
return _e_fileman_dbus_daemon_error(message,
|
||||||
|
"could not allocate memory.");
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(dev, directory, len);
|
memcpy(dev, directory, len);
|
||||||
dev[len] = '\0';
|
dev[len] = '\0';
|
||||||
|
@ -111,6 +127,7 @@ _e_fileman_dbus_daemon_open_directory_cb(E_DBus_Object *obj __UNUSED__,
|
||||||
|
|
||||||
e_fwin_new(zone->container, dev, directory);
|
e_fwin_new(zone->container, dev, directory);
|
||||||
free(dev);
|
free(dev);
|
||||||
|
free(to_free);
|
||||||
return dbus_message_new_method_return(message);
|
return dbus_message_new_method_return(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue