1ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o/* 2ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * fgetproject.c --- get project id 3ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * 4ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * Copyright (C) 1999 Theodore Ts'o <tytso@mit.edu> 5ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * 6ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * %Begin-Header% 7ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * This file may be redistributed under the terms of the GNU Library 8ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * General Public License, version 2. 9ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o * %End-Header% 10ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o */ 11ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 12ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#ifndef _LARGEFILE_SOURCE 13ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#define _LARGEFILE_SOURCE 14ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 15ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#ifndef _LARGEFILE64_SOURCE 16ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#define _LARGEFILE64_SOURCE 17ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 18ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 19ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include "config.h" 20ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#if HAVE_ERRNO_H 21ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <errno.h> 22ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 23ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#if HAVE_UNISTD_H 24ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <unistd.h> 25ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 26ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <sys/types.h> 27ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <sys/stat.h> 28ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#if HAVE_EXT2_IOCTLS 29ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <fcntl.h> 30ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include <sys/ioctl.h> 31ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include "project.h" 32ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 33ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 34ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#include "e2p.h" 35ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 36ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#ifdef O_LARGEFILE 37ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE) 38ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#else 39ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) 40ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 41ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 42ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'oint fsetproject(const char *name, unsigned long project) 43ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o{ 44ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#ifndef FS_IOC_FSGETXATTR 45ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o errno = EOPNOTSUPP; 46ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o return -1; 47ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#else 48ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o int fd, r, save_errno = 0; 49ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o struct fsxattr fsx; 50ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o 51ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o fd = open (name, OPEN_FLAGS); 52ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o if (fd == -1) 53ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o return -1; 54ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o r = ioctl (fd, FS_IOC_FSGETXATTR, &fsx); 55ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o if (r == -1) { 56ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o save_errno = errno; 57ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o goto errout; 58ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o } 59ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o fsx.fsx_projid = project; 60ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o r = ioctl (fd, FS_IOC_FSSETXATTR, &fsx); 61ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o if (r == -1) 62ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o save_errno = errno; 63ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'oerrout: 64ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o close (fd); 65ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o if (save_errno) 66ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o errno = save_errno; 67ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o return r; 68ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o#endif 69ccf028f2e766e1364bbebff36f8274d72749de43Theodore Ts'o} 70