https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3037
--- Comment #1 from Alexander <alexanderfaucher@xxxxxxxxx> 2008-11-08 02:57:34 PDT ---
I did another look at the code and wrote a fix. It appears to work just fine
now. A 3 minute export now happens before you can see the progress bar.
rtp_analysis.c:~2470
--- BEFORE ---
/* XXX how do you just copy the file? */
while ((rread = read(fd, pd, 1)) > 0) {
if(stop_flag)
break;
if((count > progbar_nextstep) && (count <= progbar_count)) {
update_progress_dlg(progbar,
(gfloat) count/progbar_count, "Saving");
progbar_nextstep = progbar_nextstep + progbar_quantum;
}
count++;
rwritten = eth_write(to_fd, pd, 1);
if ((rwritten < rread) || (rwritten < 0) || (rread < 0)) {
eth_close(forw_fd);
eth_close(rev_fd);
eth_close(to_fd);
destroy_progress_dlg(progbar);
return FALSE;
}
}
--- AFTER ---
+ unsigned char buffer[1024];
/* XXX how do you just copy the file? */
- while ((rread = read(fd, pd, 1)) > 0) {
+ while ((rread = read(fd, buffer, 1024)) > 0) {
if(stop_flag)
break;
if((count > progbar_nextstep) && (count <= progbar_count)) {
update_progress_dlg(progbar,
(gfloat) count/progbar_count, "Saving");
progbar_nextstep = progbar_nextstep + progbar_quantum;
}
count++;
- rwritten = eth_write(to_fd, pd, 1);
+ rwritten = eth_write(to_fd, buffer, rread >= 0 ? rread : 0);
if ((rwritten < rread) || (rwritten < 0) || (rread < 0)) {
eth_close(forw_fd);
eth_close(rev_fd);
eth_close(to_fd);
destroy_progress_dlg(progbar);
return FALSE;
}
}
The code could use another round of testing to ensure there was no side
effects.
Good luck,
Alexander Faucher
--
Configure bugmail: https://bugs.wireshark.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.