Module Name: src Committed By: pooka Date: Fri Feb 18 14:33:11 UTC 2011
Modified Files: src/lib/librumphijack: hijack.c Log Message: fix rename To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 src/lib/librumphijack/hijack.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/librumphijack/hijack.c diff -u src/lib/librumphijack/hijack.c:1.51 src/lib/librumphijack/hijack.c:1.52 --- src/lib/librumphijack/hijack.c:1.51 Fri Feb 18 14:25:04 2011 +++ src/lib/librumphijack/hijack.c Fri Feb 18 14:33:11 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: hijack.c,v 1.51 2011/02/18 14:25:04 pooka Exp $ */ +/* $NetBSD: hijack.c,v 1.52 2011/02/18 14:33:11 pooka Exp $ */ /*- * Copyright (c) 2011 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: hijack.c,v 1.51 2011/02/18 14:25:04 pooka Exp $"); +__RCSID("$NetBSD: hijack.c,v 1.52 2011/02/18 14:33:11 pooka Exp $"); #define __ssp_weak_name(fun) _hijack_ ## fun @@ -689,6 +689,25 @@ return rv; } +int +rename(const char *from, const char *to) +{ + int (*op_rename)(const char *, const char *); + + if (path_isrump(from)) { + if (!path_isrump(to)) + return EXDEV; + + from = path_host2rump(from); + to = path_host2rump(to); + op_rename = GETSYSCALL(rump, RENAME); + } else { + op_rename = GETSYSCALL(host, RENAME); + } + + return op_rename(from, to); +} + int __socket30(int, int, int); int __socket30(int domain, int type, int protocol) @@ -1618,12 +1637,6 @@ (const char *, char *, size_t), \ (path, buf, bufsiz)) -/* XXX: cross-kernel renames need to be blocked */ -PATHCALL(int, rename, DUALCALL_RENAME, \ - (const char *path, const char *to), \ - (const char *, const char *), \ - (path, to)) - PATHCALL(int, mkdir, DUALCALL_MKDIR, \ (const char *path, mode_t mode), \ (const char *, mode_t), \