Rev 2676 | Rev 2685 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2676 | Rev 2678 | ||
|---|---|---|---|
| Line 305... | Line 305... | ||
| 305 | ipc_answer_0(rid, EINVAL); |
305 | ipc_answer_0(rid, EINVAL); |
| 306 | return; |
306 | return; |
| 307 | } |
307 | } |
| 308 | 308 | ||
| 309 | size_t bytes = max(0, min(dentry->size - pos, len)); |
309 | size_t bytes = max(0, min(dentry->size - pos, len)); |
| 310 | (void) ipc_data_read_deliver(callid, dentry->data + pos, bytes); |
310 | (void) ipc_data_read_finalize(callid, dentry->data + pos, bytes); |
| 311 | 311 | ||
| 312 | /* |
312 | /* |
| 313 | * Answer the VFS_READ call. |
313 | * Answer the VFS_READ call. |
| 314 | */ |
314 | */ |
| 315 | ipc_answer_1(rid, EOK, bytes); |
315 | ipc_answer_1(rid, EOK, bytes); |
| Line 347... | Line 347... | ||
| 347 | /* |
347 | /* |
| 348 | * Check whether the file needs to grow. |
348 | * Check whether the file needs to grow. |
| 349 | */ |
349 | */ |
| 350 | if (pos + len <= dentry->size) { |
350 | if (pos + len <= dentry->size) { |
| 351 | /* The file size is not changing. */ |
351 | /* The file size is not changing. */ |
| 352 | (void) ipc_data_write_deliver(callid, dentry->data + pos, len); |
352 | (void) ipc_data_write_finalize(callid, dentry->data + pos, len); |
| 353 | ipc_answer_1(rid, EOK, len); |
353 | ipc_answer_1(rid, EOK, len); |
| 354 | return; |
354 | return; |
| 355 | } |
355 | } |
| 356 | size_t delta = (pos + len) - dentry->size; |
356 | size_t delta = (pos + len) - dentry->size; |
| 357 | /* |
357 | /* |
| Line 367... | Line 367... | ||
| 367 | ipc_answer_1(rid, EOK, 0); |
367 | ipc_answer_1(rid, EOK, 0); |
| 368 | return; |
368 | return; |
| 369 | } |
369 | } |
| 370 | dentry->size += delta; |
370 | dentry->size += delta; |
| 371 | dentry->data = newdata; |
371 | dentry->data = newdata; |
| 372 | (void) ipc_data_write_deliver(callid, dentry->data + pos, len); |
372 | (void) ipc_data_write_finalize(callid, dentry->data + pos, len); |
| 373 | ipc_answer_1(rid, EOK, len); |
373 | ipc_answer_1(rid, EOK, len); |
| 374 | } |
374 | } |
| 375 | 375 | ||
| 376 | /** |
376 | /** |
| 377 | * @} |
377 | * @} |