UK_TRACEPOINT(trace_vfs_getcwd_ret, "\"%s\"", const char*);
UK_TRACEPOINT(trace_vfs_getcwd_err, "%d", int);
-UK_SYSCALL_DEFINE(char*, getcwd, char*, path, size_t, size)
+UK_SYSCALL_R_DEFINE(char*, getcwd, char*, path, size_t, size)
{
trace_vfs_getcwd(path, size);
struct task *t = main_task;
if (size < len) {
error = ERANGE;
- goto out_errno;
+ goto out_error;
}
if (!path) {
path = (char*)malloc(size);
if (!path) {
error = ENOMEM;
- goto out_errno;
+ goto out_error;
}
} else {
if (!size) {
error = EINVAL;
- goto out_errno;
+ goto out_error;
}
}
trace_vfs_getcwd_ret(path);
return path;
- out_errno:
+out_error:
trace_vfs_getcwd_err(error);
- errno = error;
- return NULL;
+ return ERR2PTR(-error);
}
UK_TRACEPOINT(trace_vfs_dup, "%d", int);