|
|
1.1 ! root 1: /* $Id: scsi.c,v 1.1 2003/07/29 18:18:35 fredette Exp $ */ ! 2: ! 3: /* generic/scsi.c - generic SCSI implementation support: */ ! 4: ! 5: /* ! 6: * Copyright (c) 2003 Matt Fredette ! 7: * All rights reserved. ! 8: * ! 9: * Redistribution and use in source and binary forms, with or without ! 10: * modification, are permitted provided that the following conditions ! 11: * are met: ! 12: * 1. Redistributions of source code must retain the above copyright ! 13: * notice, this list of conditions and the following disclaimer. ! 14: * 2. Redistributions in binary form must reproduce the above copyright ! 15: * notice, this list of conditions and the following disclaimer in the ! 16: * documentation and/or other materials provided with the distribution. ! 17: * 3. All advertising materials mentioning features or use of this software ! 18: * must display the following acknowledgement: ! 19: * This product includes software developed by Matt Fredette. ! 20: * 4. The name of the author may not be used to endorse or promote products ! 21: * derived from this software without specific prior written permission. ! 22: * ! 23: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ! 24: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ! 25: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ! 26: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, ! 27: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ! 28: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ! 29: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ! 31: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ! 32: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! 33: * POSSIBILITY OF SUCH DAMAGE. ! 34: */ ! 35: ! 36: #include <tme/common.h> ! 37: _TME_RCSID("$Id: scsi.c,v 1.1 2003/07/29 18:18:35 fredette Exp $"); ! 38: ! 39: /* includes: */ ! 40: #include <tme/generic/scsi.h> ! 41: #include <stdlib.h> ! 42: ! 43: /* this scores a SCSI connection: */ ! 44: int ! 45: tme_scsi_connection_score(struct tme_connection *conn, unsigned int *_score) ! 46: { ! 47: struct tme_scsi_connection *conn_scsi; ! 48: struct tme_scsi_connection *conn_scsi_other; ! 49: ! 50: /* both sides must be SCSI connections: */ ! 51: assert(conn->tme_connection_type == TME_CONNECTION_SCSI); ! 52: assert(conn->tme_connection_other->tme_connection_type == TME_CONNECTION_SCSI); ! 53: ! 54: /* you cannot connect a bus to a bus, or a device to a device: */ ! 55: conn_scsi ! 56: = (struct tme_scsi_connection *) conn; ! 57: conn_scsi_other ! 58: = (struct tme_scsi_connection *) conn->tme_connection_other; ! 59: *_score ! 60: = ((conn_scsi->tme_scsi_connection_sequence_get ! 61: == NULL) ! 62: != (conn_scsi_other->tme_scsi_connection_sequence_get ! 63: == NULL)); ! 64: return (TME_OK); ! 65: } ! 66: ! 67: /* this parses a SCSI ID: */ ! 68: int ! 69: tme_scsi_id_parse(const char *id_string) ! 70: { ! 71: unsigned long id; ! 72: char *p1; ! 73: ! 74: /* catch a NULL string: */ ! 75: if (id_string == NULL) { ! 76: return (-1); ! 77: } ! 78: ! 79: /* convert the string: */ ! 80: id = strtoul(id_string, &p1, 0); ! 81: if (p1 == id_string ! 82: || *p1 != '\0') { ! 83: return (-1); ! 84: } ! 85: return (id); ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.