- int fd = *(int *)fd_ptr;
- return xwrite (fd, buf, len);
+ struct write_cb_data *data = data_vp;
+ int r;
+
+ r = xwrite (data->fd, buf, len);
+ if (r == -1)
+ return -1;
+
+ data->written += len;
+
+ if (progress_hint > 0)
+ notify_progress (data->written, progress_hint);
+
+ return 0;