1 /* 2 * PrinterData.cpp 3 * Copyright 1999-2000 Y.Takagi All Rights Reserved. 4 */ 5 6 #include <Directory.h> 7 #include <FindDirectory.h> 8 #include <Path.h> 9 #include <StorageDefs.h> 10 11 #include "PrinterData.h" 12 13 const char *PD_DRIVER_NAME = "Driver Name"; 14 const char *PD_PRINTER_NAME = "Printer Name"; 15 const char *PD_COMMENTS = "Comments"; 16 const char *PD_TRANSPORT = "transport"; 17 const char *PD_PROTOCOL_CLASS = "libprint:protocolClass"; 18 19 PrinterData::PrinterData(BNode *node) 20 : fProtocolClass(0) 21 , fNode(node) 22 { 23 load(); 24 } 25 26 PrinterData::~PrinterData() 27 { 28 } 29 30 void PrinterData::load() 31 { 32 if (fNode == NULL) return; 33 34 char buffer[512]; 35 36 fNode->ReadAttr(PD_DRIVER_NAME, B_STRING_TYPE, 0, buffer, sizeof(buffer)); 37 // TODO fix possible buffer overrun (not terminated string). 38 fDriverName = buffer; 39 fNode->ReadAttr(PD_PRINTER_NAME, B_STRING_TYPE, 0, buffer, sizeof(buffer)); 40 fPrinterName = buffer; 41 fNode->ReadAttr(PD_COMMENTS, B_STRING_TYPE, 0, buffer, sizeof(buffer)); 42 fComments = buffer; 43 fNode->ReadAttr(PD_TRANSPORT, B_STRING_TYPE, 0, buffer, sizeof(buffer)); 44 fTransport = buffer; 45 46 int32 valueI32; 47 fNode->ReadAttr(PD_PROTOCOL_CLASS, B_INT32_TYPE, 0, &valueI32, sizeof(valueI32)); 48 fProtocolClass = (int)valueI32; 49 } 50 51 void PrinterData::save() 52 { 53 if (fNode == NULL) return; 54 55 int32 valueI32 = (int32)fProtocolClass; 56 fNode->WriteAttr(PD_PROTOCOL_CLASS, B_INT32_TYPE, 0, &valueI32, sizeof(valueI32)); 57 } 58 59 bool PrinterData::getPath(string &path) const 60 { 61 if (fNode == NULL) return false; 62 63 node_ref nref; 64 if (fNode->GetNodeRef(&nref) != B_OK) return false; 65 66 BDirectory dir(&nref); 67 if (dir.InitCheck() != B_OK) return false; 68 69 BPath path0(&dir, "."); 70 if (path0.InitCheck() != B_OK) return false; 71 72 path = path0.Path(); 73 return true; 74 } 75