118 lines
1.8 KiB
C++
118 lines
1.8 KiB
C++
|
|
// 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);
|
|
}
|
|
|