//returns false on failure bool Database::readDevice(DataHandler& data, DEVICE& dev) { //address TEST(data.read(&dev.address, BTADDR_LEN)); //name int strLen; TEST(data.read(&strLen, sizeof(int))); StringData<char>* sd = new StringData<char>(strLen); dev.name.setData(sd); MAASSERT(sd->getRefCount() == 1); TEST(data.read(sd->pointer(), strLen)); dev.name[strLen] = 0; //services int nServ; TEST(data.read(&nServ, sizeof(int))); dev.services.resize(nServ); for(int i=0; i<nServ; i++) { BtService& serv(dev.services[i]); TEST(data.read(&serv.port, sizeof(int))); TEST(data.read(&strLen, sizeof(int))); sd = new StringData<char>(strLen); serv.name.setData(sd); MAASSERT(sd->getRefCount() == 1); TEST(data.read(sd->pointer(), strLen)); serv.name[strLen] = 0; } mNServices += nServ; return true; }