diff --git a/vfs/fish.c b/vfs/fish.c
index 2a2deb6..d03917e 100644
a
|
b
|
fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) |
366 | 366 | dir->timestamp.tv_sec += fish_directory_timeout; |
367 | 367 | quoted_path = name_quote (remote_path, 0); |
368 | 368 | fish_command (me, super, NONE, |
369 | | "#LIST /%s\n" |
370 | | "if ls -1 /%s >/dev/null 2>&1 ;\n" |
| 369 | "#LIST \"/%s\"\n" |
| 370 | "if ls -1 \"/%s\" >/dev/null 2>&1 ;\n" |
371 | 371 | "then\n" |
372 | | "ls -lLan /%s 2>/dev/null | grep '^[^cbt]' | (\n" |
| 372 | "ls -lQLan \"/%s\" 2>/dev/null | grep '^[^cbt]' | (\n" |
373 | 373 | "while read p l u g s m d y n; do\n" |
374 | | "echo \"P$p $u.$g\nS$s\nd$m $d $y\n:$n\n\"\n" |
| 374 | "echo \"P$p $u.$g\nS$s\nd$m $d $y\n:$n\n\"|sed 's#\\\"##g'\n" |
375 | 375 | "done\n" |
376 | 376 | ")\n" |
377 | | "ls -lan /%s 2>/dev/null | grep '^[cb]' | (\n" |
| 377 | "ls -lQan \"/%s\" 2>/dev/null | grep '^[cb]' | (\n" |
378 | 378 | "while read p l u g a i m d y n; do\n" |
379 | 379 | "echo \"P$p $u.$g\nE$a$i\nd$m $d $y\n:$n\n\"\n" |
380 | 380 | "done\n" |
… |
… |
fish_file_store(struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *loc |
527 | 527 | * instead of stderr. It makes impossible the use of "head || dd" |
528 | 528 | * algorithm for file appending case, therefore just "dd" is used for it. |
529 | 529 | */ |
530 | | |
| 530 | name = unescape_string(name); |
531 | 531 | print_vfs_message(_("fish: store %s: sending command..."), name ); |
532 | | quoted_name = name_quote (name, 0); |
| 532 | quoted_name = unescape_string (name_quote (name, 0)); |
533 | 533 | |
534 | 534 | /* FIXME: File size is limited to ULONG_MAX */ |
535 | 535 | if (!fh->u.fish.append) |
536 | 536 | n = fish_command (me, super, WAIT_REPLY, |
537 | | "#STOR %lu /%s\n" |
| 537 | "#STOR %lu \"/%s\"\n" |
538 | 538 | "echo '### 001'\n" |
539 | | "file=/%s\n" |
| 539 | "file=\"/%s\"\n" |
540 | 540 | "res=`exec 3>&1\n" |
541 | 541 | "(\n" |
542 | 542 | "head -c %lu -q - || echo DD >&3\n" |
… |
… |
fish_file_store(struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *loc |
558 | 558 | (unsigned long) s.st_size); |
559 | 559 | else |
560 | 560 | n = fish_command (me, super, WAIT_REPLY, |
561 | | "#STOR %lu /%s\n" |
| 561 | "#STOR %lu \"/%s\"\n" |
562 | 562 | "echo '### 001'\n" |
563 | 563 | "{\n" |
564 | | "file=/%s\n" |
| 564 | "file=\"/%s\"\n" |
565 | 565 | "rest=%lu\n" |
566 | 566 | "while [ $rest -gt 0 ]\n" |
567 | 567 | "do\n" |
… |
… |
fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset) |
627 | 627 | return 0; |
628 | 628 | quoted_name = name_quote (name, 0); |
629 | 629 | g_free (name); |
630 | | name = quoted_name; |
| 630 | name = unescape_string(quoted_name); |
631 | 631 | fh->u.fish.append = 0; |
632 | 632 | |
633 | 633 | /* |
… |
… |
fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset) |
637 | 637 | * standard output (i.e. over the network). |
638 | 638 | */ |
639 | 639 | offset = fish_command (me, FH_SUPER, WANT_STRING, |
640 | | "#RETR /%s\n" |
641 | | "if dd if=/%s of=/dev/null bs=1 count=1 2>/dev/null ;\n" |
| 640 | "#RETR \"/%s\"\n" |
| 641 | "if dd if=\"/%s\" of=/dev/null bs=1 count=1 2>/dev/null ;\n" |
642 | 642 | "then\n" |
643 | | "ls -ln /%s 2>/dev/null | (\n" |
| 643 | "ls -ln \"/%s\" 2>/dev/null | (\n" |
644 | 644 | "read p l u g s r\n" |
645 | 645 | "echo \"$s\"\n" |
646 | 646 | ")\n" |
647 | 647 | "echo '### 100'\n" |
648 | | "cat /%s\n" |
| 648 | "cat \"//%s\"\n" |
649 | 649 | "echo '### 200'\n" |
650 | 650 | "else\n" |
651 | 651 | "echo '### 500'\n" |
… |
… |
fish_send_command(struct vfs_class *me, struct vfs_s_super *super, const char *c |
767 | 767 | return -1; \ |
768 | 768 | } \ |
769 | 769 | rpath = name_quote (crpath, 0); \ |
| 770 | rpath = unescape_string(rpath); \ |
770 | 771 | g_free (mpath); |
771 | 772 | |
772 | 773 | #define POSTFIX(flags) \ |
… |
… |
static int |
777 | 778 | fish_chmod (struct vfs_class *me, const char *path, int mode) |
778 | 779 | { |
779 | 780 | PREFIX |
780 | | g_snprintf(buf, sizeof(buf), "#CHMOD %4.4o /%s\n" |
| 781 | g_snprintf(buf, sizeof(buf), "#CHMOD %4.4o \"/%s\"\n" |
781 | 782 | "chmod %4.4o \"/%s\" 2>/dev/null\n" |
782 | 783 | "echo '### 000'\n", |
783 | 784 | mode & 07777, rpath, |
… |
… |
static int fish_##name (struct vfs_class *me, const char *path1, const char *pat |
811 | 812 | return fish_send_command(me, super2, buf, OPT_FLUSH); \ |
812 | 813 | } |
813 | 814 | |
814 | | FISH_OP(rename, "#RENAME /%s /%s\n" |
815 | | "mv /%s /%s 2>/dev/null\n" |
| 815 | FISH_OP(rename, "#RENAME \"/%s\" \"/%s\"\n" |
| 816 | "mv \"/%s\" \"/%s\" 2>/dev/null\n" |
816 | 817 | "echo '### 000'" ) |
817 | | FISH_OP(link, "#LINK /%s /%s\n" |
818 | | "ln /%s /%s 2>/dev/null\n" |
| 818 | FISH_OP(link, "#LINK \"/%s\" \"/%s\"\n" |
| 819 | "ln \"/%s\" \"/%s\" 2>/dev/null\n" |
819 | 820 | "echo '### 000'" ) |
820 | 821 | |
821 | 822 | static int fish_symlink (struct vfs_class *me, const char *setto, const char *path) |
… |
… |
static int fish_symlink (struct vfs_class *me, const char *setto, const char *pa |
824 | 825 | PREFIX |
825 | 826 | qsetto = name_quote (setto, 0); |
826 | 827 | g_snprintf(buf, sizeof(buf), |
827 | | "#SYMLINK %s /%s\n" |
828 | | "ln -s %s /%s 2>/dev/null\n" |
| 828 | "#SYMLINK \"%s\" \"/%s\"\n" |
| 829 | "ln -s \"%s\" \"/%s\" 2>/dev/null\n" |
829 | 830 | "echo '### 000'\n", |
830 | 831 | qsetto, rpath, qsetto, rpath); |
831 | 832 | g_free (qsetto); |
… |
… |
fish_chown (struct vfs_class *me, const char *path, int owner, int group) |
850 | 851 | { |
851 | 852 | PREFIX |
852 | 853 | g_snprintf (buf, sizeof(buf), |
853 | | "#CHOWN /%s /%s\n" |
854 | | "chown %s /%s 2>/dev/null\n" |
| 854 | "#CHOWN /%s \"/%s\"\n" |
| 855 | "chown %s \"/%s\" 2>/dev/null\n" |
855 | 856 | "echo '### 000'\n", |
856 | 857 | sowner, rpath, |
857 | 858 | sowner, rpath); |
858 | 859 | fish_send_command (me, super, buf, OPT_FLUSH); |
859 | 860 | /* FIXME: what should we report if chgrp succeeds but chown fails? */ |
860 | 861 | g_snprintf (buf, sizeof(buf), |
861 | | "#CHGRP /%s /%s\n" |
862 | | "chgrp %s /%s 2>/dev/null\n" |
| 862 | "#CHGRP /%s \"/%s\"\n" |
| 863 | "chgrp %s \"/%s\" 2>/dev/null\n" |
863 | 864 | "echo '### 000'\n", |
864 | 865 | sgroup, rpath, |
865 | 866 | sgroup, rpath); |
… |
… |
static int fish_unlink (struct vfs_class *me, const char *path) |
872 | 873 | { |
873 | 874 | PREFIX |
874 | 875 | g_snprintf(buf, sizeof(buf), |
875 | | "#DELE /%s\n" |
876 | | "rm -f /%s 2>/dev/null\n" |
| 876 | "#DELE \"/%s\"\n" |
| 877 | "rm -f \"/%s\" 2>/dev/null\n" |
877 | 878 | "echo '### 000'\n", |
878 | 879 | rpath, rpath); |
879 | 880 | POSTFIX(OPT_FLUSH); |
… |
… |
static int fish_mkdir (struct vfs_class *me, const char *path, mode_t mode) |
884 | 885 | PREFIX |
885 | 886 | |
886 | 887 | (void) mode; |
887 | | |
888 | 888 | g_snprintf(buf, sizeof(buf), |
889 | | "#MKD /%s\n" |
890 | | "mkdir /%s 2>/dev/null\n" |
| 889 | "#MKD \"/%s\"\n" |
| 890 | "mkdir \"/%s\" 2>/dev/null\n" |
891 | 891 | "echo '### 000'\n", |
892 | 892 | rpath, rpath); |
893 | 893 | POSTFIX(OPT_FLUSH); |
… |
… |
static int fish_rmdir (struct vfs_class *me, const char *path) |
897 | 897 | { |
898 | 898 | PREFIX |
899 | 899 | g_snprintf(buf, sizeof(buf), |
900 | | "#RMD /%s\n" |
901 | | "rmdir /%s 2>/dev/null\n" |
| 900 | "#RMD \"/%s\"\n" |
| 901 | "rmdir \"/%s\" 2>/dev/null\n" |
902 | 902 | "echo '### 000'\n", |
903 | 903 | rpath, rpath); |
904 | 904 | POSTFIX(OPT_FLUSH); |