Blob Blame Raw
diff -up cups-1.4.2/scheduler/classes.c.str3505 cups-1.4.2/scheduler/classes.c
--- cups-1.4.2/scheduler/classes.c.str3505	2009-10-07 19:16:09.000000000 +0100
+++ cups-1.4.2/scheduler/classes.c	2010-02-23 11:43:06.033263862 +0000
@@ -3,7 +3,7 @@
  *
  *   Printer class routines for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2009 by Apple Inc.
+ *   Copyright 2007-2010 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -117,7 +117,7 @@ cupsdAddPrinterToClass(
  * 'cupsdDeletePrinterFromClass()' - Delete a printer from a class.
  */
 
-void
+int					/* O - 1 if class changed, 0 otherwise */
 cupsdDeletePrinterFromClass(
     cupsd_printer_t *c,			/* I - Class to delete from */
     cupsd_printer_t *p)			/* I - Printer to delete */
@@ -149,13 +149,15 @@ 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);
 }
 
 
@@ -163,10 +165,11 @@ cupsdDeletePrinterFromClass(
  * 'cupsdDeletePrinterFromClasses()' - Delete a printer from all classes.
  */
 
-void
+int					/* O - 1 if class changed, 0 otherwise */
 cupsdDeletePrinterFromClasses(
     cupsd_printer_t *p)			/* I - Printer to delete */
 {
+  int			changed = 0;	/* Any class changed? */
   cupsd_printer_t	*c;		/* Pointer to current class */
 
 
@@ -179,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 +196,10 @@ cupsdDeletePrinterFromClasses(
       cupsdLogMessage(CUPSD_LOG_DEBUG, "Deleting implicit class \"%s\"...",
                       c->name);
       cupsdDeletePrinter(c, 0);
+      changed = 1;
     }
+
+  return (changed);
 }
 
 
diff -up cups-1.4.2/scheduler/classes.h.str3505 cups-1.4.2/scheduler/classes.h
--- cups-1.4.2/scheduler/classes.h.str3505	2008-09-19 21:03:36.000000000 +0100
+++ cups-1.4.2/scheduler/classes.h	2010-02-23 11:43:06.012262825 +0000
@@ -3,7 +3,7 @@
  *
  *   Printer class definitions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2010 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -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 cupsd_printer_t	*cupsdFindAvailablePrinter(const char *name);
 extern cupsd_printer_t	*cupsdFindClass(const char *name);
 extern void		cupsdLoadAllClasses(void);
diff -up cups-1.4.2/scheduler/ipp.c.str3505 cups-1.4.2/scheduler/ipp.c
--- cups-1.4.2/scheduler/ipp.c.str3505	2010-02-23 11:42:12.713386792 +0000
+++ cups-1.4.2/scheduler/ipp.c	2010-02-23 11:43:06.025262343 +0000
@@ -6451,7 +6451,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))
+      cupsdMarkDirty(CUPSD_DIRTY_CLASSES);
+
     cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
   }
 
diff -up cups-1.4.2/scheduler/printers.c.str3505 cups-1.4.2/scheduler/printers.c
--- cups-1.4.2/scheduler/printers.c.str3505	2010-02-23 11:42:12.223386167 +0000
+++ cups-1.4.2/scheduler/printers.c	2010-02-23 11:43:06.030262135 +0000
@@ -657,12 +657,13 @@ cupsdDeleteAllPrinters(void)
  * 'cupsdDeletePrinter()' - Delete a printer from the system.
  */
 
-void
+int					/* O - 1 if classes affected, 0 otherwise */
 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 */
@@ -773,7 +774,7 @@ cupsdDeletePrinter(
 
   if (!(p->type & CUPS_PRINTER_IMPLICIT))
   {
-    cupsdDeletePrinterFromClasses(p);
+    changed = cupsdDeletePrinterFromClasses(p);
 
    /*
     * Deregister from any browse protocols...
@@ -854,6 +855,8 @@ cupsdDeletePrinter(
   */
 
   cupsArrayRestore(Printers);
+
+  return (changed);
 }
 
 
diff -up cups-1.4.2/scheduler/printers.h.str3505 cups-1.4.2/scheduler/printers.h
--- cups-1.4.2/scheduler/printers.h.str3505	2009-06-25 18:07:26.000000000 +0100
+++ cups-1.4.2/scheduler/printers.h	2010-02-23 11:43:06.032262357 +0000
@@ -141,7 +141,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,