// Device.cpp // Device object for use in devfs // Author: Josh Holtrop // Date: 06/03/04 // Modified: 06/09/04 #include "Device.h" #include "DeviceFolder.h" #include "hos_defines.h" #include "lang/string.h" Device::Device() { major = minor = permissions = type = 0; } Device::Device(string aname) { major = minor = permissions = type = 0; name = aname; } //Types: // l = link, call setLink() // d = directory, automatically initializes a new DeviceFolder object // b = block device // c = char device Device::Device(string aname, dword amajor, dword aminor, char atype, word apermissions) { name = aname; permissions = apermissions; type = atype; switch (type) { case 'd': folder = new DeviceFolder(); break; case 'l': break; case 'b': case 'c': major = amajor; minor = aminor; break; } } Device::~Device() { switch (type) { case 'l': delete link; break; case 'd': delete (DeviceFolder *)folder; break; } } Device::Device(const Device & orig) { name = orig.name; permissions = orig.permissions; type = orig.type; switch (type) { case 'b': case 'c': default: major = orig.major; minor = orig.minor; break; case 'l': link = new string(*orig.link); break; case 'd': folder = new DeviceFolder(*(DeviceFolder *)orig.folder); break; } } Device & Device::operator=(const Device & orig) { if (&orig != this) { this->~Device(); name = orig.name; permissions = orig.permissions; type = orig.type; switch (type) { case 'b': case 'c': default: major = orig.major; minor = orig.minor; break; case 'l': link = new string(*orig.link); break; case 'd': folder = new DeviceFolder(*(DeviceFolder *)orig.folder); break; } } return *this; } void Device::setLink(string alink) { if (type == 'l') link = new string(alink); }