В Птн, 02/02/2007 в 14:28 +0100, Alexander Larsson пишет: 

> This part looks overly complex. Why not just use
> gnome_vfs_uri_append_path(), possibly with a call to
> gnome_vfs_make_path_name_canonical() afterward.

I looked at the patch again and found some problems with it:
this code will remove host info from uri if relative path has a lot of
'..'

So i tried another way (it is only an example, so I hard-coded base &
escaped vars):

=================================================================================
    gchar *base = "http://www.somehost.com/path/to/file";;
    gchar *escaped = "../../../../../relative";

    const char *resolved_relative_uri_path;
    GnomeVFSURI *base_uri;
    GnomeVFSURI *resolved_relative_uri;

    base_uri = gnome_vfs_uri_new(base);
    if (base_uri == NULL)
        return 1;

    resolved_relative_uri = gnome_vfs_uri_append_string(base_uri,
escaped);
    uri_path = gnome_vfs_uri_get_path (resolved_relative_uri);

    /* Complex part, I'll explain later
     */
    if (resolved_relative_uri_path[0] != GNOME_VFS_URI_PATH_CHR) {
        gint offset = 0;
        if (resolved_relative_uri_path[0] == '.' 
                && resolved_relative_uri_path[1] == '.')
            offset += 2;

        if (uri_path[offset] == GNOME_VFS_URI_PATH_CHR)
            offset += 1;

        gchar *tmp_path = resolved_relative_uri->text;
        resolved_relative_uri->text =
g_strconcat(GNOME_VFS_URI_PATH_STR, tmp_path + offset, NULL);
        g_free(tmp_path);
    }

    uri = gnome_vfs_uri_to_string(resolved_relative_uri,
GNOME_VFS_URI_HIDE_NONE);

    gnome_vfs_uri_unref(base_uri);
    gnome_vfs_uri_unref(resolved_relative_uri);
=================================================================================

I think that some explanations needed:
Why do we need this complex part?
If we try to call gnome_vfs_uri_append_path(...) with supplied values
uri will contain:
    http://www.somehost.com../relative

I don't think this is what we wanted...

This happens when the number of '..' is odd and it is greater then
number of dirs
in /path/to/file. if the number of '..' is even, then we will get:
    http://www.somehost.comrelative

The problem with this code is that it uses uri->text, because I haven't
found something like gnome_vfs_uri_set_path(...)
If it is OK for private function, I will create patch. If not, how can I
do the same thing
(changing path without touching other parts of uri) with public or
private functions?

-- 
nautilus-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/nautilus-list

Reply via email to