*
* Home page of code is: http://smartmontools.sourceforge.net
*
- * Copyright (C) 2008 Christian Franke <smartmontools-support@lists.sourceforge.net>
+ * Copyright (C) 2008-9 Christian Franke <smartmontools-support@lists.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "dev_interface.h"
#include "dev_ata_cmd_set.h"
-const char * dev_legacy_cpp_cvsid = "$Id: dev_legacy.cpp 2915 2009-09-18 21:17:37Z chrfranke $"
+const char * dev_legacy_cpp_cvsid = "$Id: dev_legacy.cpp 2973 2009-10-26 22:38:19Z chrfranke $"
DEV_INTERFACE_H_CVSID;
extern smartmonctrl * con; // con->reportscsiioctl
int avail_len = req_buff[4] + 5;
int len = (avail_len < req_len ? avail_len : req_len);
if (len < 36)
- return this;
+ return this;
// Use INQUIRY to detect type
- smart_device * newdev = 0;
- try {
- // 3ware ?
- if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) {
- close();
+
+ // 3ware ?
+ if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) {
+ close();
#if defined(_WIN32) || defined(__CYGWIN__)
- set_err(EINVAL, "AMCC/3ware controller, please try changing device to %s,N", get_dev_name());
+ set_err(EINVAL, "AMCC/3ware controller, please try changing device to %s,N", get_dev_name());
#else
- set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n"
- "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name());
+ set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n"
+ "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name());
#endif
- return this;
- }
+ return this;
+ }
- // Marvell ?
- if (len >= 42 && !memcmp(req_buff + 36, "MVSATA", 6)) { // TODO: Linux-specific?
- //pout("Device %s: using '-d marvell' for ATA disk with Marvell driver\n", get_dev_name());
- close();
- newdev = new legacy_marvell_device(smi(), get_dev_name(), get_req_type());
- newdev->open(); // TODO: Can possibly pass open fd
- delete this;
- return newdev;
- }
+ // Marvell ?
+ if (len >= 42 && !memcmp(req_buff + 36, "MVSATA", 6)) { // TODO: Linux-specific?
+ //pout("Device %s: using '-d marvell' for ATA disk with Marvell driver\n", get_dev_name());
+ close();
+ smart_device_auto_ptr newdev(
+ new legacy_marvell_device(smi(), get_dev_name(), get_req_type()),
+ this
+ );
+ newdev->open(); // TODO: Can possibly pass open fd
+ delete this;
+ return newdev.release();
+ }
- // SAT or USB ?
- newdev = smi()->autodetect_sat_device(this, req_buff, len);
+ // SAT or USB ?
+ {
+ smart_device * newdev = smi()->autodetect_sat_device(this, req_buff, len);
if (newdev)
// NOTE: 'this' is now owned by '*newdev'
return newdev;
}
- catch (...) {
- // Cleanup if exception occurs after newdev was allocated
- delete newdev;
- throw;
- }
// Nothing special found
return this;
static void free_devnames(char * * devnames, int numdevs)
{
- static const char version[] = "$Id: dev_legacy.cpp 2915 2009-09-18 21:17:37Z chrfranke $";
+ static const char version[] = "$Id: dev_legacy.cpp 2973 2009-10-26 22:38:19Z chrfranke $";
for (int i = 0; i < numdevs; i++)
FreeNonZero(devnames[i], -1,__LINE__, version);
FreeNonZero(devnames, (sizeof (char*) * numdevs),__LINE__, version);
for (i = 0; i < numata; i++) {
ata_device * atadev = get_ata_device(atanames[i], type);
if (atadev)
- devlist.add(atadev);
+ devlist.push_back(atadev);
}
free_devnames(atanames, numata);
for (i = 0; i < numscsi; i++) {
scsi_device * scsidev = get_scsi_device(scsinames[i], type);
if (scsidev)
- devlist.add(scsidev);
+ devlist.push_back(scsidev);
}
free_devnames(scsinames, numscsi);
return true;