118c2aff7Sartem /* 218c2aff7Sartem * CDDL HEADER START 318c2aff7Sartem * 418c2aff7Sartem * The contents of this file are subject to the terms of the 518c2aff7Sartem * Common Development and Distribution License (the "License"). 618c2aff7Sartem * You may not use this file except in compliance with the License. 718c2aff7Sartem * 818c2aff7Sartem * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 918c2aff7Sartem * or http://www.opensolaris.org/os/licensing. 1018c2aff7Sartem * See the License for the specific language governing permissions 1118c2aff7Sartem * and limitations under the License. 1218c2aff7Sartem * 1318c2aff7Sartem * When distributing Covered Code, include this CDDL HEADER in each 1418c2aff7Sartem * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1518c2aff7Sartem * If applicable, add the following below this CDDL HEADER, with the 1618c2aff7Sartem * fields enclosed by brackets "[]" replaced with your own identifying 1718c2aff7Sartem * information: Portions Copyright [yyyy] [name of copyright owner] 1818c2aff7Sartem * 1918c2aff7Sartem * CDDL HEADER END 2018c2aff7Sartem */ 2118c2aff7Sartem /* 22*b941d3fcSartem * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 2318c2aff7Sartem * Use is subject to license terms. 2418c2aff7Sartem */ 2518c2aff7Sartem 2618c2aff7Sartem #pragma ident "%Z%%M% %I% %E% SMI" 2718c2aff7Sartem 2818c2aff7Sartem #include <stdio.h> 2918c2aff7Sartem #include <string.h> 3018c2aff7Sartem #include <dirent.h> 3118c2aff7Sartem #include <fcntl.h> 3218c2aff7Sartem #include <string.h> 3318c2aff7Sartem #include <errno.h> 3418c2aff7Sartem #include <limits.h> 3518c2aff7Sartem #include <unistd.h> 3618c2aff7Sartem #include <sys/mkdev.h> 3718c2aff7Sartem #include <volmgt.h> 3818c2aff7Sartem #include <ctype.h> 3918c2aff7Sartem #include <sys/types.h> 4018c2aff7Sartem #include <sys/stat.h> 4118c2aff7Sartem #include <sys/param.h> 4218c2aff7Sartem #include "volmgt_private.h" 4318c2aff7Sartem 4418c2aff7Sartem /* 4518c2aff7Sartem * arc approved interface 4618c2aff7Sartem * - can not be modified without approval from an arc 4718c2aff7Sartem * 4818c2aff7Sartem * committment level: 4918c2aff7Sartem * public 5018c2aff7Sartem * 5118c2aff7Sartem * description: 5218c2aff7Sartem * volmgt_running: check to see if volume management is running. 5318c2aff7Sartem * 5418c2aff7Sartem * arguments: 5518c2aff7Sartem * none. 5618c2aff7Sartem * 5718c2aff7Sartem * return value(s): 5818c2aff7Sartem * TRUE if volume management is running, FALSE if not. 5918c2aff7Sartem * 6018c2aff7Sartem * preconditions: 6118c2aff7Sartem * none. 6218c2aff7Sartem */ 6318c2aff7Sartem int 6418c2aff7Sartem volmgt_running(void) 6518c2aff7Sartem { 6618c2aff7Sartem /* vold is dead */ 6718c2aff7Sartem return (FALSE); 6818c2aff7Sartem } 6918c2aff7Sartem 7018c2aff7Sartem 7118c2aff7Sartem /* 7218c2aff7Sartem * arc approved interface 7318c2aff7Sartem * - can not be modified without approval from an arc 7418c2aff7Sartem * 7518c2aff7Sartem * committment level: 7618c2aff7Sartem * public 7718c2aff7Sartem * 7818c2aff7Sartem * description: 7918c2aff7Sartem * volmgt_inuse: check to see if volume management is currently 8018c2aff7Sartem * managing a particular device. 8118c2aff7Sartem * 8218c2aff7Sartem * arguments: 8318c2aff7Sartem * path - the name of the device in /dev. For example, 8418c2aff7Sartem * "/dev/rdiskette". 8518c2aff7Sartem * 8618c2aff7Sartem * return value(s): 8718c2aff7Sartem * TRUE if volume management is managing the device, FALSE if not. 8818c2aff7Sartem * 8918c2aff7Sartem * preconditions: 9018c2aff7Sartem * none. 9118c2aff7Sartem */ 9218c2aff7Sartem /* ARGSUSED */ 9318c2aff7Sartem int 9418c2aff7Sartem volmgt_inuse(char *path) 9518c2aff7Sartem { 9618c2aff7Sartem return (FALSE); 9718c2aff7Sartem } 9818c2aff7Sartem 9918c2aff7Sartem 10018c2aff7Sartem /* 10118c2aff7Sartem * arc approved interface 10218c2aff7Sartem * - can not be modified without approval from an arc 10318c2aff7Sartem * 10418c2aff7Sartem * committment level: 10518c2aff7Sartem * public 10618c2aff7Sartem * 10718c2aff7Sartem * description: 10818c2aff7Sartem * volmgt_check: have volume management look at its devices to check 10918c2aff7Sartem * for media having arrived. Since volume management can't 11018c2aff7Sartem * automatically check all types of devices, this function is provided 11118c2aff7Sartem * to allow applications to cause the check to happen automatically. 11218c2aff7Sartem * 11318c2aff7Sartem * arguments: 11418c2aff7Sartem * path - the name of the device in /dev. For example, 11518c2aff7Sartem * /dev/rdiskette. If path is NULL, all "checkable" devices are 11618c2aff7Sartem * checked. 11718c2aff7Sartem * 11818c2aff7Sartem * return value(s): 11918c2aff7Sartem * TRUE if media was found in the device, FALSE if not. 12018c2aff7Sartem * 12118c2aff7Sartem * preconditions: 12218c2aff7Sartem * volume management must be running. 12318c2aff7Sartem */ 12418c2aff7Sartem /* ARGSUSED */ 12518c2aff7Sartem int 12618c2aff7Sartem volmgt_check(char *path) 12718c2aff7Sartem { 12818c2aff7Sartem return (FALSE); 12918c2aff7Sartem } 13018c2aff7Sartem 13118c2aff7Sartem 13218c2aff7Sartem /* 13318c2aff7Sartem * arc approved interface 13418c2aff7Sartem * - can not be modified without approval from an arc 13518c2aff7Sartem * 13618c2aff7Sartem * committment level: 13718c2aff7Sartem * public 13818c2aff7Sartem * 13918c2aff7Sartem * description: 14018c2aff7Sartem * volmgt_ownspath: check to see if the given path is contained in 14118c2aff7Sartem * the volume management name space. 14218c2aff7Sartem * 14318c2aff7Sartem * arguments: 14418c2aff7Sartem * path - string containing the path. 14518c2aff7Sartem * 14618c2aff7Sartem * return value(s): 14718c2aff7Sartem * TRUE if the path is owned by volume management, FALSE if not. 14818c2aff7Sartem * Will return FALSE if volume management isn't running. 14918c2aff7Sartem * 15018c2aff7Sartem * preconditions: 15118c2aff7Sartem * none. 15218c2aff7Sartem */ 15318c2aff7Sartem /* ARGSUSED */ 15418c2aff7Sartem int 15518c2aff7Sartem volmgt_ownspath(char *path) 15618c2aff7Sartem { 15718c2aff7Sartem return (FALSE); 15818c2aff7Sartem } 15918c2aff7Sartem 16018c2aff7Sartem 16118c2aff7Sartem /* 16218c2aff7Sartem * arc approved interface 16318c2aff7Sartem * - can not be modified without approval from an arc 16418c2aff7Sartem * 16518c2aff7Sartem * committment level: 16618c2aff7Sartem * public 16718c2aff7Sartem * 16818c2aff7Sartem * description: 16918c2aff7Sartem * volmgt_root: return the root of where the volume management 17018c2aff7Sartem * name space is mounted. 17118c2aff7Sartem * 17218c2aff7Sartem * arguments: 17318c2aff7Sartem * none. 17418c2aff7Sartem * 17518c2aff7Sartem * return value(s): 17618c2aff7Sartem * Returns a pointer to a static string containing the path to the 17718c2aff7Sartem * volume management root (e.g. "/vol"). 17818c2aff7Sartem * Will return NULL if volume management isn't running. 17918c2aff7Sartem * 18018c2aff7Sartem * preconditions: 18118c2aff7Sartem * none. 18218c2aff7Sartem */ 18318c2aff7Sartem const char * 18418c2aff7Sartem volmgt_root(void) 18518c2aff7Sartem { 18618c2aff7Sartem static const char *vold_root = "/dev"; 18718c2aff7Sartem 18818c2aff7Sartem return (vold_root); 18918c2aff7Sartem } 19018c2aff7Sartem 19118c2aff7Sartem 19218c2aff7Sartem /* 19318c2aff7Sartem * arc approved interface 19418c2aff7Sartem * - can not be modified without approval from an arc 19518c2aff7Sartem * 19618c2aff7Sartem * committment level: 19718c2aff7Sartem * public 19818c2aff7Sartem * 19918c2aff7Sartem * description: 20018c2aff7Sartem * volmgt_symname: Returns the volume management symbolic name 20118c2aff7Sartem * for a given device. If an application wants to determine 20218c2aff7Sartem * what the symbolic name (e.g. "floppy0") for the /dev/rdiskette 20318c2aff7Sartem * device would be, this is the function to use. 20418c2aff7Sartem * 20518c2aff7Sartem * arguments: 20618c2aff7Sartem * path - a string containing the /dev device name. For example, 20718c2aff7Sartem * "/dev/diskette" or "/dev/rdiskette". 20818c2aff7Sartem * 20918c2aff7Sartem * Note: must be a block- or char-spcl device, and have a non-zero 21018c2aff7Sartem * st_rdev (real device) stat() value. 21118c2aff7Sartem * 21218c2aff7Sartem * return value(s): 21318c2aff7Sartem * pointer to a string containing the symbolic name. 21418c2aff7Sartem * 21518c2aff7Sartem * NULL indicates that volume management isn't managing that device. 21618c2aff7Sartem * 21718c2aff7Sartem * The string must be free(3)'d. 21818c2aff7Sartem * 21918c2aff7Sartem * preconditions: 22018c2aff7Sartem * none. 22118c2aff7Sartem */ 22218c2aff7Sartem /* ARGSUSED */ 22318c2aff7Sartem char * 22418c2aff7Sartem volmgt_symname(char *path) 22518c2aff7Sartem { 22618c2aff7Sartem return (NULL); 22718c2aff7Sartem } 22818c2aff7Sartem 22918c2aff7Sartem 23018c2aff7Sartem /* 23118c2aff7Sartem * arc approved interface 23218c2aff7Sartem * - can not be modified without approval from an arc 23318c2aff7Sartem * 23418c2aff7Sartem * committment level: 23518c2aff7Sartem * public 23618c2aff7Sartem * 23718c2aff7Sartem * description: 23818c2aff7Sartem * volmgt_symdev: Returns the device given the volume management 23918c2aff7Sartem * symbolic name. If an application wants to determine 24018c2aff7Sartem * what the device associated with a particular symbolic name 24118c2aff7Sartem * might be, this is the function to use. 24218c2aff7Sartem * 24318c2aff7Sartem * arguments: 24418c2aff7Sartem * path - a string containing the symbolic device name. For example, 24518c2aff7Sartem * "cdrom0" or "floppy0". 24618c2aff7Sartem * 24718c2aff7Sartem * return value(s): 24818c2aff7Sartem * pointer to a string containing the /dev name. 24918c2aff7Sartem * 25018c2aff7Sartem * NULL indicates that volume management isn't managing that device. 25118c2aff7Sartem * 25218c2aff7Sartem * The string must be free(3)'d. 25318c2aff7Sartem * 25418c2aff7Sartem * preconditions: 25518c2aff7Sartem * none. 25618c2aff7Sartem */ 25718c2aff7Sartem /* ARGSUSED */ 25818c2aff7Sartem char * 25918c2aff7Sartem volmgt_symdev(char *symname) 26018c2aff7Sartem { 26118c2aff7Sartem return (NULL); 26218c2aff7Sartem } 26318c2aff7Sartem 26418c2aff7Sartem 26518c2aff7Sartem /* 26618c2aff7Sartem * arc approved interface 26718c2aff7Sartem * - can not be modified without approval from an arc 26818c2aff7Sartem * 26918c2aff7Sartem * committment level: 27018c2aff7Sartem * public 27118c2aff7Sartem * 27218c2aff7Sartem * description: 27318c2aff7Sartem * volmgt_feat_enabled: check to see if a volume management feature 27418c2aff7Sartem * is available 27518c2aff7Sartem * 27618c2aff7Sartem * arguments: 27718c2aff7Sartem * feat_str - a string containing the feature to be checked for 27818c2aff7Sartem * 27918c2aff7Sartem * return value(s): 28018c2aff7Sartem * return non-zero if the specified feature is available in 28118c2aff7Sartem * volume management, else return zero 28218c2aff7Sartem * 28318c2aff7Sartem * preconditions: 28418c2aff7Sartem * none. 28518c2aff7Sartem */ 28618c2aff7Sartem 28718c2aff7Sartem 28818c2aff7Sartem /* 28918c2aff7Sartem * the following is a lit of the "feature" available in volmgt 29018c2aff7Sartem * 29118c2aff7Sartem * this list is meant to be updated when new features (that users may 29218c2aff7Sartem * want to use) are added to volmgt 29318c2aff7Sartem * 29418c2aff7Sartem * note: feature strings added should be all lower case, and spaces are 29518c2aff7Sartem * discouraged 29618c2aff7Sartem * 29718c2aff7Sartem * (see psarc/1995/138 for more info) 29818c2aff7Sartem */ 29918c2aff7Sartem static char *volmgt_feat_list[] = { 30018c2aff7Sartem #ifdef DIRECT_DEV_ACCESS_WORKING 30118c2aff7Sartem "direct-dev-access", /* access through /dev co-exists */ 30218c2aff7Sartem #endif 30318c2aff7Sartem "floppy-summit-interfaces", /* volmgt_{acquire,release} */ 30418c2aff7Sartem NULL 30518c2aff7Sartem }; 30618c2aff7Sartem 30718c2aff7Sartem 30818c2aff7Sartem int 30918c2aff7Sartem volmgt_feature_enabled(char *feat_str) 31018c2aff7Sartem { 31118c2aff7Sartem return (0); 31218c2aff7Sartem } 31318c2aff7Sartem /* 31418c2aff7Sartem * arc approved interface 31518c2aff7Sartem * - can not be modified without approval from an arc 31618c2aff7Sartem * 31718c2aff7Sartem * committment level: 31818c2aff7Sartem * uncommitted 31918c2aff7Sartem * 32018c2aff7Sartem * description: 32118c2aff7Sartem * volmgt_acquire: try to acquire the volmgt advisory device reservation 32218c2aff7Sartem * for a specific device. 32318c2aff7Sartem * 32418c2aff7Sartem * arguments: 32518c2aff7Sartem * dev - a device name to attempt reserving. This string can be: 32618c2aff7Sartem * - a full path name to a device 32718c2aff7Sartem * - a symbolic device name (e.g. floppy0) 32818c2aff7Sartem * 32918c2aff7Sartem * id - a reservation string that hopefully describes the application 33018c2aff7Sartem * making this reservation. 33118c2aff7Sartem * 33218c2aff7Sartem * pid - a pointer to a pid_t type. If this argument is not NULL 33318c2aff7Sartem * and the requested device is already reserved, the process 33418c2aff7Sartem * id of the reservation owner will be returned in this 33518c2aff7Sartem * location. 33618c2aff7Sartem * 33718c2aff7Sartem * ovr - an override indicator. If set to non-zero, the caller requests 33818c2aff7Sartem * that this reservation be made unconditionally. 33918c2aff7Sartem * 34018c2aff7Sartem * err - the address of a pointer to a string which is to receive the 34118c2aff7Sartem * id argument used when the current device was reserved. This 34218c2aff7Sartem * is only used when the current reservation attempt fails due 34318c2aff7Sartem * to an already existing reservation for this device. 34418c2aff7Sartem * 34518c2aff7Sartem * return value(s): 34618c2aff7Sartem * A non-zero indicator if successful. 34718c2aff7Sartem * 34818c2aff7Sartem * A zero indicator if unsuccessful. If errno is EBUSY, then the err 34918c2aff7Sartem * argument will be set to point to the string that the process currently 35018c2aff7Sartem * holding the reservation supplied when reserving the device. It is up 35118c2aff7Sartem * to the caller to release the storage occupied by the string via 35218c2aff7Sartem * free(3C) when no longer needed. 35318c2aff7Sartem * 35418c2aff7Sartem * preconditions: 35518c2aff7Sartem * none 35618c2aff7Sartem */ 35718c2aff7Sartem /* ARGSUSED */ 35818c2aff7Sartem int 35918c2aff7Sartem volmgt_acquire(char *dev, char *id, int ovr, char **err, pid_t *pidp) 36018c2aff7Sartem { 36118c2aff7Sartem return (0); 36218c2aff7Sartem } 36318c2aff7Sartem 36418c2aff7Sartem 36518c2aff7Sartem /* 36618c2aff7Sartem * arc approved interface 36718c2aff7Sartem * - can not be modified without approval from an arc 36818c2aff7Sartem * 36918c2aff7Sartem * committment level: 37018c2aff7Sartem * uncommitted 37118c2aff7Sartem * 37218c2aff7Sartem * description: 37318c2aff7Sartem * volmgt_release: try to release the volmgt advisory device reservation 37418c2aff7Sartem * for a specific device. 37518c2aff7Sartem * 37618c2aff7Sartem * arguments: 37718c2aff7Sartem * dev - a device name to attempt reserving. This string can be: 37818c2aff7Sartem * - a full path name to a device 37918c2aff7Sartem * - a symbolic device name (e.g. floppy0) 38018c2aff7Sartem * 38118c2aff7Sartem * return value(s): 38218c2aff7Sartem * A non-zero indicator if successful 38318c2aff7Sartem * A zero indicator if unsuccessful 38418c2aff7Sartem * 38518c2aff7Sartem * preconditions: 38618c2aff7Sartem * none 38718c2aff7Sartem */ 38818c2aff7Sartem int 38918c2aff7Sartem volmgt_release(char *dev) 39018c2aff7Sartem { 39118c2aff7Sartem return (0); 39218c2aff7Sartem } 39318c2aff7Sartem 39418c2aff7Sartem 39518c2aff7Sartem /* 39618c2aff7Sartem * returns the "value" of the attribute. 39718c2aff7Sartem * If the attribute is boolean and is TRUE, 39818c2aff7Sartem * "true" is returned. If the boolean is 39918c2aff7Sartem * FALSE, NULL is returned. If the attribute 40018c2aff7Sartem * doesn't exist, NULL is returned. The pointer 40118c2aff7Sartem * returned by media_getattr has been malloc'd and 40218c2aff7Sartem * it is the callers responsibility to free it. 40318c2aff7Sartem */ 40418c2aff7Sartem /* 40518c2aff7Sartem * arc approved interface 40618c2aff7Sartem * - can not be modified without approval from an arc 40718c2aff7Sartem * 40818c2aff7Sartem * committment level: 40918c2aff7Sartem * public 41018c2aff7Sartem * 41118c2aff7Sartem * description: 41218c2aff7Sartem * media_getattr: returns the value for an attribute for a piece of 41318c2aff7Sartem * removable media. 41418c2aff7Sartem * 41518c2aff7Sartem * arguments: 41618c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 41718c2aff7Sartem * device. 41818c2aff7Sartem * 41918c2aff7Sartem * attr - name of the attribute. 42018c2aff7Sartem * 42118c2aff7Sartem * return value(s): 42218c2aff7Sartem * returns NULL or a pointer to a string that contains the value for 42318c2aff7Sartem * the requested attribute. 42418c2aff7Sartem * 42518c2aff7Sartem * NULL can mean: 42618c2aff7Sartem * - the media doesn't exist 42718c2aff7Sartem * - there is no more space for malloc(3) 42818c2aff7Sartem * - the attribute doesn't exist for the named media 42918c2aff7Sartem * - the attribute is a boolean and is FALSE 43018c2aff7Sartem * 43118c2aff7Sartem * the pointer to the string must be free'd with free(3). 43218c2aff7Sartem * 43318c2aff7Sartem * preconditions: 43418c2aff7Sartem * volume management (vold) must be running. 43518c2aff7Sartem */ 43618c2aff7Sartem /* ARGSUSED */ 43718c2aff7Sartem char * 43818c2aff7Sartem media_getattr(char *vol_path, char *attr) 43918c2aff7Sartem { 44018c2aff7Sartem return (NULL); 44118c2aff7Sartem } 44218c2aff7Sartem 44318c2aff7Sartem 44418c2aff7Sartem /* 44518c2aff7Sartem * sets the attribute "attr" to value "value". 44618c2aff7Sartem * 44718c2aff7Sartem * If value == "" the flag is 44818c2aff7Sartem * considered to be a TRUE boolean. 44918c2aff7Sartem * 45018c2aff7Sartem * If value == 0, it is considered to be a FALSE boolean. 45118c2aff7Sartem * returns TRUE on success, FALSE on failure. 45218c2aff7Sartem * 45318c2aff7Sartem * Can fail for reasons of permission, or if you 45418c2aff7Sartem * write a read-only attribute. 45518c2aff7Sartem */ 45618c2aff7Sartem 45718c2aff7Sartem /* 45818c2aff7Sartem * arc approved interface 45918c2aff7Sartem * - can not be modified without approval from an arc 46018c2aff7Sartem * 46118c2aff7Sartem * committment level: 46218c2aff7Sartem * public 46318c2aff7Sartem * 46418c2aff7Sartem * description: 46518c2aff7Sartem * media_setattr: set an attribute for a piece of media to a 46618c2aff7Sartem * particular value. 46718c2aff7Sartem * 46818c2aff7Sartem * arguments: 46918c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 47018c2aff7Sartem * device. 47118c2aff7Sartem * 47218c2aff7Sartem * attr - name of the attribute. 47318c2aff7Sartem * 47418c2aff7Sartem * value - value of the attribute. If value == "", the flag is 47518c2aff7Sartem * considered to be a boolean that is TRUE. If value == 0, it 47618c2aff7Sartem * is considered to be a FALSE boolean. 47718c2aff7Sartem * 47818c2aff7Sartem * return value(s): 47918c2aff7Sartem * TRUE on success, FALSE for failure. 48018c2aff7Sartem * 48118c2aff7Sartem * Can fail because: 48218c2aff7Sartem * - don't have permission to set the attribute because caller 48318c2aff7Sartem * is not the owner of the media and attribute is a "system" 48418c2aff7Sartem * attribute. 48518c2aff7Sartem * 48618c2aff7Sartem * - don't have permission to set the attribute because the 48718c2aff7Sartem * attribute is a "system" attribute and is read-only. 48818c2aff7Sartem * 48918c2aff7Sartem * preconditions: 49018c2aff7Sartem * volume management must be running. 49118c2aff7Sartem */ 49218c2aff7Sartem /* ARGSUSED */ 49318c2aff7Sartem int 49418c2aff7Sartem media_setattr(char *vol_path, char *attr, char *value) 49518c2aff7Sartem { 49618c2aff7Sartem return (FALSE); 49718c2aff7Sartem } 49818c2aff7Sartem 49918c2aff7Sartem 50018c2aff7Sartem /* 50118c2aff7Sartem * Returns the "id" of a volume. If the returned value 50218c2aff7Sartem * & VOLID_TMP, the volume is temporary and this value 50318c2aff7Sartem * cannot be relied upon across reboots. 50418c2aff7Sartem */ 50518c2aff7Sartem /* 50618c2aff7Sartem * arc approved interface 50718c2aff7Sartem * - can not be modified without approval from an arc 50818c2aff7Sartem * 50918c2aff7Sartem * committment level: 51018c2aff7Sartem * public 51118c2aff7Sartem * 51218c2aff7Sartem * description: 51318c2aff7Sartem * media_getid: return the "id" of a piece of media. 51418c2aff7Sartem * 51518c2aff7Sartem * arguments: 51618c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 51718c2aff7Sartem * device. 51818c2aff7Sartem * return value(s): 51918c2aff7Sartem * returns a u_longlong_t that is the "id" of the volume. 52018c2aff7Sartem * 52118c2aff7Sartem * preconditions: 52218c2aff7Sartem * volume management must be running. 52318c2aff7Sartem */ 52418c2aff7Sartem u_longlong_t 52518c2aff7Sartem media_getid(char *vol_path) 52618c2aff7Sartem { 52718c2aff7Sartem return (0); 52818c2aff7Sartem } 52918c2aff7Sartem /* 53018c2aff7Sartem * arc approved interface (pending) 53118c2aff7Sartem * - can not be modified without approval from an arc 53218c2aff7Sartem * 53318c2aff7Sartem * committment level: 53418c2aff7Sartem * public 53518c2aff7Sartem * 53618c2aff7Sartem * description: 53718c2aff7Sartem * media_findname: try to come up with the character device when 53818c2aff7Sartem * provided with a starting point. This interface provides the 53918c2aff7Sartem * application programmer to provide "user friendly" names and 54018c2aff7Sartem * easily determine the "/vol" name. 54118c2aff7Sartem * 54218c2aff7Sartem * arguments: 54318c2aff7Sartem * start - a string describing a device. This string can be: 54418c2aff7Sartem * - a full path name to a device (insures it's a 54518c2aff7Sartem * character device by using getfullrawname()). 54618c2aff7Sartem * - a full path name to a volume management media name 54718c2aff7Sartem * with partitions (will return the lowest numbered 54818c2aff7Sartem * raw partition. 54918c2aff7Sartem * - the name of a piece of media (e.g. "fred"). 55018c2aff7Sartem * - a symbolic device name (e.g. floppy0, cdrom0, etc) 55118c2aff7Sartem * - a name like "floppy" or "cdrom". Will pick the lowest 55218c2aff7Sartem * numbered device with media in it. 55318c2aff7Sartem * 55418c2aff7Sartem * return value(s): 55518c2aff7Sartem * A pointer to a string that contains the character device 55618c2aff7Sartem * most appropriate to the "start" argument. 55718c2aff7Sartem * 55818c2aff7Sartem * NULL indicates that we were unable to find media based on "start". 55918c2aff7Sartem * 56018c2aff7Sartem * The string must be free(3)'d. 56118c2aff7Sartem * 56218c2aff7Sartem * preconditions: 56318c2aff7Sartem * none. 56418c2aff7Sartem */ 56518c2aff7Sartem /* ARGSUSED */ 56618c2aff7Sartem char * 56718c2aff7Sartem media_findname(char *start) 56818c2aff7Sartem { 569*b941d3fcSartem /* 570*b941d3fcSartem * Eventually should implement using HAL interfaces. 571*b941d3fcSartem * In the short term however, return NULL for aliases, 572*b941d3fcSartem * and self for absolute pathnames. 573*b941d3fcSartem */ 574*b941d3fcSartem if (start[0] == '/') { 575*b941d3fcSartem return (strdup(start)); 576*b941d3fcSartem } else { 57718c2aff7Sartem return (NULL); 57818c2aff7Sartem } 579*b941d3fcSartem } 58018c2aff7Sartem 58118c2aff7Sartem struct alias { 58218c2aff7Sartem char *alias; 58318c2aff7Sartem char *name; 58418c2aff7Sartem }; 58518c2aff7Sartem 58618c2aff7Sartem /* 58718c2aff7Sartem * "old" aliases -- used to be used when vold wasn't running 58818c2aff7Sartem */ 58918c2aff7Sartem static struct alias device_aliases[] = { 59018c2aff7Sartem { "fd", "/dev/rdiskette" }, 59118c2aff7Sartem { "fd0", "/dev/rdiskette" }, 59218c2aff7Sartem { "fd1", "/dev/rdiskette1" }, 59318c2aff7Sartem { "diskette", "/dev/rdiskette" }, 59418c2aff7Sartem { "diskette0", "/dev/rdiskette0" }, 59518c2aff7Sartem { "diskette1", "/dev/rdiskette1" }, 59618c2aff7Sartem { "rdiskette", "/dev/rdiskette" }, 59718c2aff7Sartem { "rdiskette0", "/dev/rdiskette0" }, 59818c2aff7Sartem { "rdiskette1", "/dev/rdiskette1" }, 59918c2aff7Sartem { "floppy", "/dev/rdiskette" }, 60018c2aff7Sartem { "floppy0", "/dev/rdiskette0" }, 60118c2aff7Sartem { "floppy1", "/dev/rdiskette1" }, 60218c2aff7Sartem { "cd", "cdrom0" }, 60318c2aff7Sartem { "cd0", "cdrom0" }, 60418c2aff7Sartem { "cd1", "cdrom1" }, 60518c2aff7Sartem { NULL, NULL } 60618c2aff7Sartem }; 60718c2aff7Sartem 60818c2aff7Sartem /* 60918c2aff7Sartem * This is an ON Consolidation Private interface. 61018c2aff7Sartem */ 61118c2aff7Sartem /* ARGSUSED */ 61218c2aff7Sartem char * 61318c2aff7Sartem _media_oldaliases(char *start) 61418c2aff7Sartem { 61518c2aff7Sartem struct alias *s; 61618c2aff7Sartem char *p; 61718c2aff7Sartem char *res = NULL; 61818c2aff7Sartem 61918c2aff7Sartem for (s = device_aliases; s->alias != NULL; s++) { 62018c2aff7Sartem if (strcmp(start, s->alias) == 0) { 62118c2aff7Sartem res = strdup(s->name); 62218c2aff7Sartem break; 62318c2aff7Sartem } 62418c2aff7Sartem } 62518c2aff7Sartem 62618c2aff7Sartem return (res); 62718c2aff7Sartem } 62818c2aff7Sartem 62918c2aff7Sartem 63018c2aff7Sartem /* 63118c2aff7Sartem * This is an ON Consolidation Private interface. 63218c2aff7Sartem * 63318c2aff7Sartem * Print out the aliases available to the program user. Changes 63418c2aff7Sartem * depending in whether volume management is running. 63518c2aff7Sartem */ 63618c2aff7Sartem void 63718c2aff7Sartem _media_printaliases(void) 63818c2aff7Sartem { 63918c2aff7Sartem } 640