Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > b2b31f8f12ce25fb0a2128354ea26724 > files > 66

cups-1.3.7-30.el5.src.rpm

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,