diff -up cups-1.3.7/scheduler/classes.c.str3505 cups-1.3.7/scheduler/classes.c --- cups-1.3.7/scheduler/classes.c.str3505 2010-04-13 18:08:15.498023492 +0100 +++ cups-1.3.7/scheduler/classes.c 2010-04-13 18:08:43.576022264 +0100 @@ -118,7 +118,7 @@ cupsdAddPrinterToClass( * 'cupsdDeletePrinterFromClass()' - Delete a printer from a class. */ -void +int cupsdDeletePrinterFromClass( cupsd_printer_t *c, /* I - Class to delete from */ cupsd_printer_t *p) /* I - Printer to delete */ @@ -150,13 +150,14 @@ cupsdDeletePrinterFromClass( (c->num_printers - i) * sizeof(cupsd_printer_t *)); } else - return; + return (0); /* * * Update the IPP attributes (have to do this for member-names)... */ cupsdSetPrinterAttrs(c); + return (1); } @@ -164,10 +165,11 @@ cupsdDeletePrinterFromClass( * 'cupsdDeletePrinterFromClasses()' - Delete a printer from all classes. */ -void +int cupsdDeletePrinterFromClasses( cupsd_printer_t *p) /* I - Printer to delete */ { + int changed = 0; /* Any class changed? */ cupsd_printer_t *c; /* Pointer to current class */ @@ -180,7 +182,7 @@ cupsdDeletePrinterFromClasses( c; c = (cupsd_printer_t *)cupsArrayNext(Printers)) if (c->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) - cupsdDeletePrinterFromClass(c, p); + changed |= cupsdDeletePrinterFromClass(c, p); /* * Then clean out any empty implicit classes... @@ -193,7 +195,10 @@ cupsdDeletePrinterFromClasses( { cupsArrayRemove(ImplicitPrinters, c); cupsdDeletePrinter(c, 0); + changed = 1; } + + return (changed); } diff -up cups-1.3.7/scheduler/classes.h.str3505 cups-1.3.7/scheduler/classes.h --- cups-1.3.7/scheduler/classes.h.str3505 2007-07-11 22:46:42.000000000 +0100 +++ cups-1.3.7/scheduler/classes.h 2010-04-13 18:08:43.576022264 +0100 @@ -21,9 +21,9 @@ extern cupsd_printer_t *cupsdAddClass(const char *name); extern void cupsdAddPrinterToClass(cupsd_printer_t *c, cupsd_printer_t *p); -extern void cupsdDeletePrinterFromClass(cupsd_printer_t *c, +extern int cupsdDeletePrinterFromClass(cupsd_printer_t *c, cupsd_printer_t *p); -extern void cupsdDeletePrinterFromClasses(cupsd_printer_t *p); +extern int cupsdDeletePrinterFromClasses(cupsd_printer_t *p); extern void cupsdDeleteAllClasses(void); extern cupsd_printer_t *cupsdFindAvailablePrinter(const char *name); extern cupsd_printer_t *cupsdFindClass(const char *name); diff -up cups-1.3.7/scheduler/ipp.c.str3505 cups-1.3.7/scheduler/ipp.c --- cups-1.3.7/scheduler/ipp.c.str3505 2010-04-13 18:08:15.580024227 +0100 +++ cups-1.3.7/scheduler/ipp.c 2010-04-13 18:08:43.589148746 +0100 @@ -5979,7 +5979,9 @@ delete_printer(cupsd_client_t *con, /* cupsdLogMessage(CUPSD_LOG_INFO, "Printer \"%s\" deleted by \"%s\".", printer->name, get_username(con)); - cupsdDeletePrinter(printer, 0); + if (cupsdDeletePrinter(printer, 0)) + cupsdSaveAllClasses(); + cupsdSaveAllPrinters(); } diff -up cups-1.3.7/scheduler/printers.c.str3505 cups-1.3.7/scheduler/printers.c --- cups-1.3.7/scheduler/printers.c.str3505 2010-04-13 18:08:15.600022713 +0100 +++ cups-1.3.7/scheduler/printers.c 2010-04-13 18:08:43.606024139 +0100 @@ -597,12 +597,13 @@ cupsdDeleteAllPrinters(void) * 'cupsdDeletePrinter()' - Delete a printer from the system. */ -void +int cupsdDeletePrinter( cupsd_printer_t *p, /* I - Printer to delete */ int update) /* I - Update printers.conf? */ { - int i; /* Looping var */ + int i, /* Looping var */ + changed = 0; /* Class changed? */ #ifdef __sgi char filename[1024]; /* Interface script filename */ #endif /* __sgi */ @@ -701,7 +702,7 @@ cupsdDeletePrinter( if (!(p->type & CUPS_PRINTER_IMPLICIT)) { - cupsdDeletePrinterFromClasses(p); + changed = cupsdDeletePrinterFromClasses(p); /* * Deregister from any browse protocols... @@ -777,6 +778,8 @@ cupsdDeletePrinter( */ cupsArrayRestore(Printers); + + return (changed); } diff -up cups-1.3.7/scheduler/printers.h.str3505 cups-1.3.7/scheduler/printers.h --- cups-1.3.7/scheduler/printers.h.str3505 2008-01-30 19:21:55.000000000 +0000 +++ cups-1.3.7/scheduler/printers.h 2010-04-13 18:08:43.629147933 +0100 @@ -135,7 +135,7 @@ extern void cupsdAddPrinterUser(cupsd_p const char *username); extern void cupsdCreateCommonData(void); extern void cupsdDeleteAllPrinters(void); -extern void cupsdDeletePrinter(cupsd_printer_t *p, int update); +extern int cupsdDeletePrinter(cupsd_printer_t *p, int update); extern cupsd_printer_t *cupsdFindDest(const char *name); extern cupsd_printer_t *cupsdFindPrinter(const char *name); extern cupsd_quota_t *cupsdFindQuota(cupsd_printer_t *p,