diff options
Diffstat (limited to 'usr/src/lib/libvolmgt/common/volattr.c')
| -rw-r--r-- | usr/src/lib/libvolmgt/common/volattr.c | 337 |
1 files changed, 0 insertions, 337 deletions
diff --git a/usr/src/lib/libvolmgt/common/volattr.c b/usr/src/lib/libvolmgt/common/volattr.c deleted file mode 100644 index 3e97f08449..0000000000 --- a/usr/src/lib/libvolmgt/common/volattr.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright (c) 1996 by Sun Microsystems, Inc. - * All rights reserved. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <fcntl.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/param.h> -#include <sys/vol.h> -#include <errno.h> - -/* - * returns the "value" of the attribute. - * If the attribute is boolean and is TRUE, - * "true" is returned. If the boolean is - * FALSE, NULL is returned. If the attribute - * doesn't exist, NULL is returned. The pointer - * returned by media_getattr has been malloc'd and - * it is the callers responsibility to free it. - */ -/* - * arc approved interface - * - can not be modified without approval from an arc - * - * committment level: - * public - * - * description: - * media_getattr: returns the value for an attribute for a piece of - * removable media. - * - * arguments: - * path - Path to the media in /vol. Can be the block or character - * device. - * - * attr - name of the attribute. - * - * return value(s): - * returns NULL or a pointer to a string that contains the value for - * the requested attribute. - * - * NULL can mean: - * - the media doesn't exist - * - there is no more space for malloc(3) - * - the attribute doesn't exist for the named media - * - the attribute is a boolean and is FALSE - * - * the pointer to the string must be free'd with free(3). - * - * preconditions: - * volume management (vold) must be running. - */ -char * -media_getattr(char *vol_path, char *attr) -{ - int fd = -1; - struct stat64 sb; - char valuebuf[MAX_ATTR_LEN+1]; - struct vioc_gattr ga; - char *res; - - - if ((fd = open(vol_path, O_RDONLY|O_NDELAY)) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = NULL; - goto dun; - } - - if (fstat64(fd, &sb) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = NULL; - goto dun; - } - - /* ensure we have either a blk- or char-spcl device */ - if (!S_ISBLK(sb.st_mode) && !S_ISCHR(sb.st_mode)) { -#ifdef DEBUG - (void) fprintf(stderr, - "media_getattr: %s not a block or raw device\n", - vol_path); -#endif - res = NULL; - goto dun; - } - - ga.ga_value = valuebuf; - ga.ga_val_len = MAX_ATTR_LEN; - ga.ga_attr = attr; - ga.ga_attr_len = strlen(attr); - - /* try to get the attribute */ - if (ioctl(fd, VOLIOCGATTR, &ga) < 0) { - /* errno ENOENT here just means prop not found */ -#ifdef DEBUG - if (errno != ENOENT) { - perror(vol_path); - } -#endif - res = NULL; - goto dun; - } - - /* successfully got the attribute */ - res = strdup(valuebuf); - -dun: - if (fd >= 0) { - (void) close(fd); - } - return (res); -} - - -/* - * sets the attribute "attr" to value "value". - * - * If value == "" the flag is - * considered to be a TRUE boolean. - * - * If value == 0, it is considered to be a FALSE boolean. - * returns TRUE on success, FALSE on failure. - * - * Can fail for reasons of permission, or if you - * write a read-only attribute. - */ - -/* - * arc approved interface - * - can not be modified without approval from an arc - * - * committment level: - * public - * - * description: - * media_setattr: set an attribute for a piece of media to a - * particular value. - * - * arguments: - * path - Path to the media in /vol. Can be the block or character - * device. - * - * attr - name of the attribute. - * - * value - value of the attribute. If value == "", the flag is - * considered to be a boolean that is TRUE. If value == 0, it - * is considered to be a FALSE boolean. - * - * return value(s): - * TRUE on success, FALSE for failure. - * - * Can fail because: - * - don't have permission to set the attribute because caller - * is not the owner of the media and attribute is a "system" - * attribute. - * - * - don't have permission to set the attribute because the - * attribute is a "system" attribute and is read-only. - * - * preconditions: - * volume management must be running. - */ -int -media_setattr(char *vol_path, char *attr, char *value) -{ - int fd = -1; - struct stat64 sb; - struct vioc_sattr sa; - int res; - - - if ((fd = open(vol_path, O_RDONLY|O_NDELAY)) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = FALSE; - goto dun; - } - - if (fstat64(fd, &sb) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = FALSE; - goto dun; - } - - /* ensure we have either a blk- or char-spcl device */ - if (!S_ISBLK(sb.st_mode) && !S_ISCHR(sb.st_mode)) { -#ifdef DEBUG - (void) fprintf(stderr, - "media_setattr: %s not a block or raw device\n", - vol_path); -#endif - res = FALSE; - goto dun; - } - - sa.sa_attr = attr; - sa.sa_attr_len = strlen(attr); - sa.sa_value = value; - sa.sa_value_len = strlen(value); - - /* try to set the attribute */ - if (ioctl(fd, VOLIOCSATTR, &sa) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = FALSE; - goto dun; - } - - /* successfully set the attribute */ - res = TRUE; - -dun: - if (fd >= 0) { - (void) close(fd); - } - return (res); -} - - -/* - * Returns the "id" of a volume. If the returned value - * & VOLID_TMP, the volume is temporary and this value - * cannot be relied upon across reboots. - */ -/* - * arc approved interface - * - can not be modified without approval from an arc - * - * committment level: - * public - * - * description: - * media_getid: return the "id" of a piece of media. - * - * arguments: - * path - Path to the media in /vol. Can be the block or character - * device. - * return value(s): - * returns a u_longlong_t that is the "id" of the volume. - * - * preconditions: - * volume management must be running. - */ -u_longlong_t -media_getid(char *vol_path) -{ - int fd = -1; - struct stat64 sb; - char path[MAXNAMELEN+1]; - struct vioc_info info; - u_longlong_t res; - - - if ((fd = open(vol_path, O_RDONLY|O_NDELAY)) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = 0; - goto dun; - - } - - if (fstat64(fd, &sb) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = 0; - goto dun; - } - - /* ensure we have either a blk- or char-spcl device */ - if (!S_ISBLK(sb.st_mode) && !S_ISCHR(sb.st_mode)) { -#ifdef DEBUG - (void) fprintf(stderr, - "media_getid: %s not a block or raw device\n", - vol_path); -#endif - res = 0; - goto dun; - } - - memset(path, 0, MAXNAMELEN+1); - info.vii_devpath = path; - info.vii_pathlen = MAXNAMELEN; - - /* try to get the id */ - if (ioctl(fd, VOLIOCINFO, &info) < 0) { -#ifdef DEBUG - perror(vol_path); -#endif - res = 0; - goto dun; - } - - /* successfully got the id */ - res = info.vii_id; - -dun: - if (fd >= 0) { - (void) close(fd); - } - return (res); -} |
