+ off_t l = 0;
+ if (fp->type == KNF_TYPE_LOCAL) {
+ l = read(fp->fd, buf, len);
+ fp->offset += l;
+ } else {
+ off_t rest = len, curr;
+ while (rest) {
+ curr = read(fp->fd, buf + l, rest);
+ if (curr == 0) break; // FIXME: end of file or bad network? I do not know...
+ l += curr; rest -= curr;
+ }
+ fp->offset += l;
+ }