Subversion Repositories HelenOS

Rev

Rev 3048 | Rev 3252 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3048 Rev 3251
Line 328... Line 328...
328
        ops->node_put(cur);
328
        ops->node_put(cur);
329
    if (tmp)
329
    if (tmp)
330
        ops->node_put(tmp);
330
        ops->node_put(tmp);
331
}
331
}
332
 
332
 
-
 
333
#define RD_BASE     1024    // FIXME
-
 
334
#define RD_READ_BLOCK   (RD_BASE + 1)
-
 
335
 
-
 
336
bool libfs_blockread(int phone, void *buffer, size_t *bufpos, size_t *buflen,
-
 
337
    size_t *pos, void *dst, size_t size, size_t block_size)
-
 
338
{
-
 
339
    size_t offset = 0;
-
 
340
    size_t left = size;
-
 
341
   
-
 
342
    while (left > 0) {
-
 
343
        size_t rd;
-
 
344
       
-
 
345
        if (*bufpos + left < *buflen)
-
 
346
            rd = left;
-
 
347
        else
-
 
348
            rd = *buflen - *bufpos;
-
 
349
       
-
 
350
        if (rd > 0) {
-
 
351
            memcpy(dst + offset, buffer + *bufpos, rd);
-
 
352
            offset += rd;
-
 
353
            *bufpos += rd;
-
 
354
            *pos += rd;
-
 
355
            left -= rd;
-
 
356
        }
-
 
357
       
-
 
358
        if (*bufpos == *buflen) {
-
 
359
            ipcarg_t retval;
-
 
360
            int rc = async_req_2_1(phone, RD_READ_BLOCK,
-
 
361
                *pos / block_size, block_size, &retval);
-
 
362
            if ((rc != EOK) || (retval != EOK))
-
 
363
                return false;
-
 
364
           
-
 
365
            *bufpos = 0;
-
 
366
            *buflen = block_size;
-
 
367
        }
-
 
368
    }
-
 
369
   
-
 
370
    return true;
-
 
371
}
-
 
372
 
333
/** @}
373
/** @}
334
 */
374
 */