1/* 2 * Copyright 2002-2009, Axel D��rfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <errno.h> 8#include <unistd.h> 9 10#include <NodeMonitor.h> 11 12#include <errno_private.h> 13#include <syscalls.h> 14#include <syscall_utils.h> 15 16 17int 18chown(const char *path, uid_t owner, gid_t group) 19{ 20 struct stat stat; 21 status_t status; 22 23 stat.st_uid = owner; 24 stat.st_gid = group; 25 status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat), 26 B_STAT_UID | B_STAT_GID); 27 28 RETURN_AND_SET_ERRNO(status); 29} 30 31 32int 33lchown(const char *path, uid_t owner, gid_t group) 34{ 35 struct stat stat; 36 status_t status; 37 38 stat.st_uid = owner; 39 stat.st_gid = group; 40 status = _kern_write_stat(-1, path, false, &stat, sizeof(struct stat), 41 B_STAT_UID | B_STAT_GID); 42 43 RETURN_AND_SET_ERRNO(status); 44} 45 46 47int 48fchown(int fd, uid_t owner, gid_t group) 49{ 50 struct stat stat; 51 status_t status; 52 53 stat.st_uid = owner; 54 stat.st_gid = group; 55 status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat), 56 B_STAT_UID | B_STAT_GID); 57 58 RETURN_AND_SET_ERRNO(status); 59} 60 61 62int 63fchownat(int fd, const char* path, uid_t owner, gid_t group, int flag) 64{ 65 struct stat stat; 66 status_t status; 67 68 stat.st_uid = owner; 69 stat.st_gid = group; 70 status = _kern_write_stat(fd, path, (flag & AT_SYMLINK_NOFOLLOW) == 0, &stat, 71 sizeof(struct stat), B_STAT_UID | B_STAT_GID); 72 73 RETURN_AND_SET_ERRNO(status); 74} 75