// DeviceFolder.cpp // DeviceFolder object for use in devfs // Author: Josh Holtrop // Date: 06/03/04 // Modified: 06/09/04 #include "DeviceFolder.h" #include "Device.h" #include "lang/LinkedList.h" #include "kio.h" void DeviceFolder::ls() { LinkedList::iterator it = devices.begin(); while (it != devices.end()) { printf("%c", (*it).type); const char *bitmask = "rwxrwxrwx"; for (dword mask = 0x100; mask; mask = mask >> 1) { if ((*it).permissions & mask) printf("%c", *bitmask); else printf("-"); bitmask++; } printf("\t"); switch ((*it).type) { case 'b': case 'c': default: printf("%d, %d\t%s\n", (*it).major, (*it).minor, (*it).name.data()); break; case 'd': printf("\t%s/\n", (*it).name.data()); break; case 'l': printf("\t%s -> %s\n", (*it).name.data(), (*it).link->data()); break; } it++; } } DeviceFolder::DeviceFolder() { } int DeviceFolder::addDevice(Device dev) { int i = 0; LinkedList::iterator it = devices.begin(); while ((*it).name < dev.name && it != devices.end()) { it++; i++; } if (it != devices.end()) if ((*it).name == dev.name) return 1; //name conflict devices.insert(i, dev); return 0; } int DeviceFolder::mkdir(string name, word permissions) { Device dev(name, 0, 0, 'd', permissions); return addDevice(dev); } int DeviceFolder::mklink(string name, string link) { Device dev(name, 0, 0, 'l', 0777); dev.setLink(link); return addDevice(dev); } int DeviceFolder::mknod(string name, dword major, dword minor, char type, word permissions) { Device dev(name, major, minor, type, permissions); return addDevice(dev); } int DeviceFolder::size() { return devices.size(); }