--- fish.c~ 2006-10-27 14:23:29.000000000 +0300 +++ fish.c 2006-10-27 14:56:12.000000000 +0300 @@ -214,7 +214,8 @@ static int fish_open_archive_int (struct vfs_class *me, struct vfs_s_super *super) { { - const char *argv[10]; + char gbuf[10]; + const char *argv[10]; /* All of 10 is used now */ const char *xsh = (SUP.flags == FISH_FLAG_RSH ? "rsh" : "ssh"); int i = 0; @@ -224,6 +225,11 @@ fish_open_archive_int (struct vfs_class #endif if (SUP.flags == FISH_FLAG_COMPRESSED) argv[i++] = "-C"; + if (SUP.flags > FISH_FLAG_RSH) { + argv[i++] = "-p"; + g_snprintf (gbuf, sizeof (gbuf), "%d", SUP.flags); + argv[i++] = gbuf; + } argv[i++] = "-l"; argv[i++] = SUP.user; argv[i++] = SUP.host; @@ -323,7 +329,7 @@ fish_open_archive (struct vfs_class *me, SUP.user = user; SUP.flags = flags; if (!strncmp (op, "rsh:", 4)) - SUP.flags |= FISH_FLAG_RSH; + SUP.flags = FISH_FLAG_RSH; SUP.cwdir = NULL; if (password) SUP.password = password; @@ -913,22 +919,23 @@ static void fish_fill_names (struct vfs_class *me, fill_names_f func) { struct vfs_s_super *super = MEDATA->supers; - const char *flags; char *name; - + char gbuf[10]; + while (super){ - switch (SUP.flags & (FISH_FLAG_RSH | FISH_FLAG_COMPRESSED)) { + const char *flags = ""; + switch (SUP.flags) { case FISH_FLAG_RSH: flags = ":r"; break; case FISH_FLAG_COMPRESSED: flags = ":C"; break; - case FISH_FLAG_RSH | FISH_FLAG_COMPRESSED: - flags = ""; - break; default: - flags = ""; + if (SUP.flags > FISH_FLAG_RSH) { + g_snprintf (gbuf, sizeof (gbuf), ":%d", SUP.flags); + flags = gbuf; + } break; }