+
+/* we need to supply our own strcmp function for file list comparisons
+ to ensure that signed/unsigned usage is consistent between machines. */
+int u_strcmp(const char *cs1, const char *cs2)
+{
+ const uchar *s1 = (uchar *)cs1;
+ const uchar *s2 = (uchar *)cs2;
+
+ while (*s1 && *s2 && (*s1 == *s2)) {
+ s1++; s2++;
+ }
+
+ return (int)*s1 - (int)*s2;
+}
+
+static int last_pct = -1;
+
+void end_progress(void)
+{
+ extern int do_progress, am_server;
+
+ if (do_progress && !am_server) {
+ rprintf(FINFO,"\n");
+ }
+ last_pct = -1;
+}
+
+void show_progress(OFF_T ofs, OFF_T size)
+{
+ extern int do_progress, am_server;
+
+ if (do_progress && !am_server) {
+ int pct = (int)((100.0*ofs)/size + 0.5);
+ if (pct != last_pct) {
+ rprintf(FINFO,"%.0f (%d%%)\r", (double)ofs, pct);
+ last_pct = pct;
+ }
+ }
+}