diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-14 18:31:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-14 18:31:25 +0000 |
commit | c1e66b2a4e2ccf3fc4f3396d97254fa058c6ae73 (patch) | |
tree | cd6ed8e6dcb2963c7183c300209a71e104db3a11 /src/fs | |
parent | 85967c4d4bd03d68a677f6e8023b192b8b4453f5 (diff) | |
download | gnunet-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.c | 50 |
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 | } |