|
@@ -23,23 +23,19 @@ int ovr_write(struct s_sandboxenv *env)
|
|
|
printf("DO WRITE ! ([%s], [%s], [%d])\n", file->filename, buf, buflen);
|
|
printf("DO WRITE ! ([%s], [%s], [%d])\n", file->filename, buf, buflen);
|
|
|
fflush(stdout);
|
|
fflush(stdout);
|
|
|
result = write(file->local_fd, buf, buflen);
|
|
result = write(file->local_fd, buf, buflen);
|
|
|
-#ifdef __x86_64__
|
|
|
|
|
- env->registers.orig_rax = -1;
|
|
|
|
|
- env->syscall_no.syscall_return = env->registers.rax = (REGISTER_TYPE) result;
|
|
|
|
|
-#else
|
|
|
|
|
-# error 32B
|
|
|
|
|
-#endif
|
|
|
|
|
- if (result == -1)
|
|
|
|
|
|
|
+ registerSetResult(env, result);
|
|
|
|
|
+ page = malloc(sizeof(*page));
|
|
|
|
|
+ free(buf);
|
|
|
|
|
+ if (result == -1 || page == NULL)
|
|
|
{
|
|
{
|
|
|
- fprintf(stderr, "Cannot write: %s\n", strerror(errno));
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ if (env->errorOutput)
|
|
|
|
|
+ fprintf(env->errorOutput, "Cannot write: %s\n", strerror(errno));
|
|
|
|
|
+ return 0;
|
|
|
}
|
|
}
|
|
|
- page = malloc(sizeof(*page));
|
|
|
|
|
page->len = result;
|
|
page->len = result;
|
|
|
page->offset_start = _fd->offset;
|
|
page->offset_start = _fd->offset;
|
|
|
_fd->offset += result;
|
|
_fd->offset += result;
|
|
|
sllist_pushback(file->modif_write, page);
|
|
sllist_pushback(file->modif_write, page);
|
|
|
- free(buf);
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|