@@ -655,10 +655,38 @@ process_get(struct sftp_conn *conn, char *src, char *dst, char *pwd,
655
655
free (tmp );
656
656
657
657
resume |= global_aflag ;
658
- if (!quiet && resume )
658
+ if (!quiet && resume )
659
+ #ifdef WINDOWS
660
+ {
661
+ printf ("Resuming " );
662
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
663
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
664
+ printf (" to " );
665
+ free (wtmp );
666
+ wtmp = utf8_to_utf16 (abs_dst );
667
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
668
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
669
+ free (wtmp );
670
+ }
671
+ #else
659
672
printf ("Resuming %s to %s\n" , g .gl_pathv [i ], abs_dst );
660
- else if (!quiet && !resume )
661
- printf ("Fetching %s to %s\n" , g .gl_pathv [i ], abs_dst );
673
+ #endif
674
+ else if (!quiet && !resume )
675
+ #ifdef WINDOWS
676
+ {
677
+ printf ("Fetching " );
678
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
679
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
680
+ printf (" to " );
681
+ free (wtmp );
682
+ wtmp = utf8_to_utf16 (abs_dst );
683
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
684
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
685
+ free (wtmp );
686
+ }
687
+ #else
688
+ printf ("Fetching %s to %s\n" , g .gl_pathv [i ], abs_dst );
689
+ #endif
662
690
if (pathname_is_dir (g .gl_pathv [i ]) && (rflag || global_rflag )) {
663
691
if (download_dir (conn , g .gl_pathv [i ], abs_dst , NULL ,
664
692
pflag || global_pflag , 1 , resume ,
@@ -745,12 +773,40 @@ process_put(struct sftp_conn *conn, char *src, char *dst, char *pwd,
745
773
}
746
774
free (tmp );
747
775
748
- resume |= global_aflag ;
776
+ resume |= global_aflag ;
749
777
if (!quiet && resume )
778
+ #ifdef WINDOWS
779
+ {
780
+ printf ("Resuming upload of " );
781
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
782
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
783
+ printf (" to " );
784
+ free (wtmp );
785
+ wtmp = utf8_to_utf16 (abs_dst );
786
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
787
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
788
+ free (wtmp );
789
+ }
790
+ #else
750
791
printf ("Resuming upload of %s to %s\n" , g .gl_pathv [i ],
751
792
abs_dst );
793
+ #endif
752
794
else if (!quiet && !resume )
795
+ #ifdef WINDOWS
796
+ {
797
+ printf ("Uploading " );
798
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
799
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
800
+ printf (" to " );
801
+ free (wtmp );
802
+ wtmp = utf8_to_utf16 (abs_dst );
803
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
804
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
805
+ free (wtmp );
806
+ }
807
+ #else
753
808
printf ("Uploading %s to %s\n" , g .gl_pathv [i ], abs_dst );
809
+ #endif
754
810
if (pathname_is_dir (g .gl_pathv [i ]) && (rflag || global_rflag )) {
755
811
if (upload_dir (conn , g .gl_pathv [i ], abs_dst ,
756
812
pflag || global_pflag , 1 , resume ,
@@ -857,8 +913,7 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag)
857
913
wchar_t * wtmp = utf8_to_utf16 (lname );
858
914
WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
859
915
WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
860
-
861
- free (tmp );
916
+ free (wtmp );
862
917
#else
863
918
printf ("%s\n" , lname );
864
919
#endif
@@ -969,11 +1024,26 @@ do_globbed_ls(struct sftp_conn *conn, char *path, char *strip_path,
969
1024
}
970
1025
lname = ls_file (fname , g .gl_statv [i ], 1 ,
971
1026
(lflag & LS_SI_UNITS ));
972
- printf ("%s\n" , lname );
973
- free (lname );
1027
+ #ifdef WINDOWS
1028
+ wchar_t * wtmp = utf8_to_utf16 (lname );
1029
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1030
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1031
+ free (wtmp );
1032
+ #else
1033
+ printf ("%s\n" , lname );
1034
+ #endif
1035
+ free (lname );
974
1036
} else {
975
- printf ("%-*s" , colspace , fname );
976
- if (c >= columns ) {
1037
+ #ifdef WINDOWS
1038
+ wchar_t * wtmp = utf8_to_utf16 (fname );
1039
+ // TODO: Deal with the sizing wprintf_s(L"%-*s", colspace, wtmp);
1040
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1041
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L" " , 1 , 0 , 0 );
1042
+ free (wtmp );
1043
+ #else
1044
+ printf ("%-*s" , colspace , fname );
1045
+ #endif
1046
+ if (c >= columns ) {
977
1047
printf ("\n" );
978
1048
c = 1 ;
979
1049
} else
@@ -1500,8 +1570,18 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1500
1570
path1 = make_absolute (path1 , * pwd );
1501
1571
remote_glob (conn , path1 , GLOB_NOCHECK , NULL , & g );
1502
1572
for (i = 0 ; g .gl_pathv [i ] && !interrupted ; i ++ ) {
1503
- if (!quiet )
1504
- printf ("Removing %s\n" , g .gl_pathv [i ]);
1573
+ if (!quiet )
1574
+ #ifdef WINDOWS
1575
+ {
1576
+ printf ("Removing " );
1577
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
1578
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1579
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1580
+ free (wtmp );
1581
+ }
1582
+ #else
1583
+ printf ("Removing %s\n" , g .gl_pathv [i ]);
1584
+ #endif
1505
1585
err = do_rm (conn , g .gl_pathv [i ]);
1506
1586
if (err != 0 && err_abort )
1507
1587
break ;
@@ -1601,7 +1681,17 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1601
1681
remote_glob (conn , path1 , GLOB_NOCHECK , NULL , & g );
1602
1682
for (i = 0 ; g .gl_pathv [i ] && !interrupted ; i ++ ) {
1603
1683
if (!quiet )
1604
- printf ("Changing mode on %s\n" , g .gl_pathv [i ]);
1684
+ #ifdef WINDOWS
1685
+ {
1686
+ printf ("Changing mode on " );
1687
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
1688
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1689
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1690
+ free (wtmp );
1691
+ }
1692
+ #else
1693
+ printf ("Changing mode on %s\n" , g .gl_pathv [i ]);
1694
+ #endif
1605
1695
err = do_setstat (conn , g .gl_pathv [i ], & a );
1606
1696
if (err != 0 && err_abort )
1607
1697
break ;
@@ -1631,13 +1721,33 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1631
1721
aa -> flags &= SSH2_FILEXFER_ATTR_UIDGID ;
1632
1722
if (cmdnum == I_CHOWN ) {
1633
1723
if (!quiet )
1634
- printf ("Changing owner on %s\n" ,
1635
- g .gl_pathv [i ]);
1724
+ #ifdef WINDOWS
1725
+ {
1726
+ printf ("Changing owner on " );
1727
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
1728
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1729
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1730
+ free (wtmp );
1731
+ }
1732
+ #else
1733
+ printf ("Changing owner on %s\n" ,
1734
+ g .gl_pathv [i ]);
1735
+ #endif
1636
1736
aa -> uid = n_arg ;
1637
1737
} else {
1638
1738
if (!quiet )
1639
- printf ("Changing group on %s\n" ,
1640
- g .gl_pathv [i ]);
1739
+ #ifdef WINDOWS
1740
+ {
1741
+ printf ("Changing group on " );
1742
+ wchar_t * wtmp = utf8_to_utf16 (g .gl_pathv [i ]);
1743
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1744
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1745
+ free (wtmp );
1746
+ }
1747
+ #else
1748
+ printf ("Changing group on %s\n" ,
1749
+ g .gl_pathv [i ]);
1750
+ #endif
1641
1751
aa -> gid = n_arg ;
1642
1752
}
1643
1753
err = do_setstat (conn , g .gl_pathv [i ], aa );
@@ -1646,18 +1756,35 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1646
1756
}
1647
1757
break ;
1648
1758
case I_PWD :
1759
+ #ifdef WINDOWS
1649
1760
printf ("Remote working directory: " );
1650
- wchar_t * wtmp = utf8_to_utf16 (* pwd );
1651
- WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1652
- WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1761
+ {
1762
+ wchar_t * wtmp = utf8_to_utf16 (* pwd );
1763
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1764
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1765
+ free (wtmp );
1766
+ }
1767
+ #else
1768
+ printf ("Remote working directory: %s\n" , * pwd );
1769
+ #endif
1653
1770
break ;
1654
1771
case I_LPWD :
1655
1772
if (!getcwd (path_buf , sizeof (path_buf ))) {
1656
1773
error ("Couldn't get local cwd: %s" , strerror (errno ));
1657
1774
err = -1 ;
1658
1775
break ;
1659
1776
}
1660
- printf ("Local working directory: %s\n" , path_buf );
1777
+ #ifdef WINDOWS
1778
+ printf ("Local working directory: " );
1779
+ {
1780
+ wchar_t * wtmp = utf8_to_utf16 (path_buf );
1781
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
1782
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
1783
+ free (wtmp );
1784
+ }
1785
+ #else
1786
+ printf ("Local working directory: %s\n" , path_buf );
1787
+ #endif
1661
1788
break ;
1662
1789
case I_QUIT :
1663
1790
/* Processed below */
@@ -2110,7 +2237,17 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2110
2237
2111
2238
if (remote_is_dir (conn , dir ) && file2 == NULL ) {
2112
2239
if (!quiet )
2113
- printf ("Changing to: %s\n" , dir );
2240
+ #ifdef WINDOWS
2241
+ {
2242
+ printf ("Changing to: " );
2243
+ wchar_t * wtmp = utf8_to_utf16 (dir );
2244
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), wtmp , wcslen (wtmp ), 0 , 0 );
2245
+ WriteConsoleW (GetStdHandle (STD_OUTPUT_HANDLE ), L"\n" , 1 , 0 , 0 );
2246
+ free (wtmp );
2247
+ }
2248
+ #else
2249
+ printf ("Changing to: %s\n" , dir );
2250
+ #endif
2114
2251
snprintf (cmd , sizeof cmd , "cd \"%s\"" , dir );
2115
2252
if (parse_dispatch_command (conn , cmd ,
2116
2253
& remote_path , 1 ) != 0 ) {
0 commit comments