diff --git a/src/add-ons/print/shared/Jamfile b/src/add-ons/print/shared/Jamfile index 5ee8a5ff6e..0aa52b2999 100644 --- a/src/add-ons/print/shared/Jamfile +++ b/src/add-ons/print/shared/Jamfile @@ -21,4 +21,5 @@ StaticLibrary # printerdriveraddon # : # PrinterDriverAddOn.cpp -# ; \ No newline at end of file +# ; + diff --git a/src/add-ons/print/shared/PrintTransportAddOn.cpp b/src/add-ons/print/shared/PrintTransportAddOn.cpp index 3bb4a3c9cf..f1156b553a 100644 --- a/src/add-ons/print/shared/PrintTransportAddOn.cpp +++ b/src/add-ons/print/shared/PrintTransportAddOn.cpp @@ -1,24 +1,32 @@ #include "PrintTransportAddOn.h" +// We don't support multiple instances of the same transport add-on static BDataIO* gTransport = NULL; -extern "C" _EXPORT BDataIO *init_transport(BMessage *msg) { - if (msg != NULL && gTransport == NULL) { - const char* printer_name = msg->FindString("printer_name"); - if (printer_name && *printer_name != '\0') { - BDirectory printer(printer_name); - if (printer.InitCheck() == B_OK) { - gTransport = instanciate_transport(&printer, msg); - return gTransport; - } - } - } +extern "C" _EXPORT BDataIO *init_transport(BMessage *msg) +{ + if (msg == NULL || gTransport != NULL) + return NULL; + + const char *spool_path = msg->FindString("printer_file"); + + if (spool_path && *spool_path != '\0') { + BDirectory printer(spool_path); + + if (printer.InitCheck() == B_OK) { + gTransport = instanciate_transport(&printer, msg); + return gTransport; + }; + }; + return NULL; } -extern "C" _EXPORT void exit_transport() { +extern "C" _EXPORT void exit_transport() +{ if (gTransport) { - delete gTransport; gTransport = NULL; + delete gTransport; + gTransport = NULL; } }