Dnia 2012-06-13, śro o godzinie 14:40 +0200, Libgadu commit list pisze: > for (i = 0; i < 9; i++) { > unsigned int left = 1048576; > + off_t current_pos = (len - 1048576) / 9 * i; > > - if (lseek(fd, (len - 1048576) / 9 * i, SEEK_SET) == > (off_t) - 1) > - return -1; > + if (lseek(fd, current_pos, SEEK_SET) == (off_t) - 1) { > + res = -1; > + break; > + } > > #define MIN(a, b) (((a) < (b)) ? (a) : (b)) > while ((res = read(fd, buf, MIN(sizeof(buf), left))) > > 0 || (res == -1 && errno == EINTR)) { > if (res != -1) { > SHA1_Update(&ctx, buf, res); > > + current_pos += res; > left -= res; > if (left == 0) > break; > + } else { > + /* Dokumentacja read(2) mówi, że nie > wiadomo, co się dzieje z pozycją po błędzie. */ > + if (lseek(fd, current_pos, SEEK_SET) == > (off_t) -1) { > + res = -1; > + break; > + } > } > } > #undef MIN
Nie lepiej by tutaj było zrobić pętlę do/while z lseek() na początku? Po pierwsze, kod dotyczący lseek() występowałby tylko raz. Po drugie, nie byłoby potrzebne makro MIN(), które na jakichś platformach i/lub środowiskach może być już zdefiniowane, wystarczyłoby normalne porównanie. Pozdr, Wojtek _______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel