aboutsummaryrefslogtreecommitdiff
path: root/src/fs
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-14 18:31:25 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-14 18:31:25 +0000
commitc1e66b2a4e2ccf3fc4f3396d97254fa058c6ae73 (patch)
treecd6ed8e6dcb2963c7183c300209a71e104db3a11 /src/fs
parent85967c4d4bd03d68a677f6e8023b192b8b4453f5 (diff)
downloadgnunet-c1e66b2a4e2ccf3fc4f3396d97254fa058c6ae73.tar.gz
gnunet-c1e66b2a4e2ccf3fc4f3396d97254fa058c6ae73.zip
-LRN: fix pipe writing and progress write
Diffstat (limited to 'src/fs')
-rw-r--r--src/fs/fs_dirmetascan.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/src/fs/fs_dirmetascan.c b/src/fs/fs_dirmetascan.c
index 372579ccb..880710356 100644
--- a/src/fs/fs_dirmetascan.c
+++ b/src/fs/fs_dirmetascan.c
@@ -346,61 +346,61 @@ write_progress (struct AddDirContext *adc, const char *filename,
346 char is_directory, enum GNUNET_DirScannerProgressUpdateReason reason) 346 char is_directory, enum GNUNET_DirScannerProgressUpdateReason reason)
347{ 347{
348 size_t filename_len; 348 size_t filename_len;
349 size_t wr; 349 ssize_t wr;
350 size_t total_write; 350 size_t total_write;
351 if ((adc->do_stop || should_stop (adc)) && reason != GNUNET_DIR_SCANNER_ASKED_TO_STOP 351 if ((adc->do_stop || should_stop (adc)) && reason != GNUNET_DIR_SCANNER_ASKED_TO_STOP
352 && reason != GNUNET_DIR_SCANNER_FINISHED) 352 && reason != GNUNET_DIR_SCANNER_FINISHED)
353 return 1; 353 return 1;
354 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 354 total_write = 0;
355 &reason, sizeof (reason)); 355 wr = 1;
356 while (wr > 0 && total_write < sizeof (reason)) 356 while ((wr > 0 || errno == EAGAIN) && total_write < sizeof (reason))
357 { 357 {
358 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 358 wr = GNUNET_DISK_file_write (adc->progress_write,
359 &((char *)&reason)[total_write], sizeof (reason) - total_write); 359 &((char *)&reason)[total_write], sizeof (reason) - total_write);
360 if (wr > 0) 360 if (wr > 0)
361 total_write += wr; 361 total_write += wr;
362 } 362 }
363 if (sizeof (reason) != wr) 363 if (sizeof (reason) != total_write)
364 return 1; 364 return adc->do_stop = 1;
365 if (filename) 365 if (filename)
366 filename_len = strlen (filename) + 1; 366 filename_len = strlen (filename) + 1;
367 else 367 else
368 filename_len = 0; 368 filename_len = 0;
369 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 369 total_write = 0;
370 &filename_len, sizeof (size_t)); 370 wr = 1;
371 while (wr > 0 && total_write < sizeof (size_t)) 371 while ((wr > 0 || errno == EAGAIN) && total_write < sizeof (size_t))
372 { 372 {
373 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 373 wr = GNUNET_DISK_file_write (adc->progress_write,
374 &((char *)&filename_len)[total_write], sizeof (size_t) - total_write); 374 &((char *)&filename_len)[total_write], sizeof (size_t) - total_write);
375 if (wr > 0) 375 if (wr > 0)
376 total_write += wr; 376 total_write += wr;
377 } 377 }
378 if (sizeof (size_t) != wr) 378 if (sizeof (size_t) != total_write)
379 return 1; 379 return adc->do_stop = 1;
380 if (filename) 380 if (filename)
381 { 381 {
382 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 382 total_write = 0;
383 filename, filename_len); 383 wr = 1;
384 while (wr > 0 && total_write < filename_len) 384 while ((wr > 0 || errno == EAGAIN) && total_write < filename_len)
385 { 385 {
386 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 386 wr = GNUNET_DISK_file_write (adc->progress_write,
387 &((char *)filename)[total_write], filename_len - total_write); 387 &((char *)filename)[total_write], filename_len - total_write);
388 if (wr > 0) 388 if (wr > 0)
389 total_write += wr; 389 total_write += wr;
390 } 390 }
391 if (filename_len != wr) 391 if (filename_len != total_write)
392 return 1; 392 return adc->do_stop = 1;
393 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 393 total_write = 0;
394 &is_directory, sizeof (char)); 394 wr = 1;
395 while (wr > 0 && total_write < sizeof (char)) 395 while ((wr > 0 || errno == EAGAIN) && total_write < sizeof (char))
396 { 396 {
397 total_write = wr = GNUNET_DISK_file_write (adc->progress_write, 397 wr = GNUNET_DISK_file_write (adc->progress_write,
398 &((char *)&is_directory)[total_write], sizeof (char) - total_write); 398 &((char *)&is_directory)[total_write], sizeof (char) - total_write);
399 if (wr > 0) 399 if (wr > 0)
400 total_write += wr; 400 total_write += wr;
401 } 401 }
402 if (sizeof (char) != wr) 402 if (sizeof (char) != total_write)
403 return 1; 403 return adc->do_stop = 1;
404 } 404 }
405 return 0; 405 return 0;
406} 406}