]> git.ipfire.org Git - thirdparty/cups-filters.git/commitdiff
Add cancel job function. 289/head
authorJai Luthra <luthrajaiji@gmail.com>
Sat, 22 Aug 2020 07:30:14 +0000 (13:00 +0530)
committerJai Luthra <luthrajaiji@gmail.com>
Sat, 22 Aug 2020 07:30:14 +0000 (13:00 +0530)
Signed-off-by: Jai Luthra <luthrajaiji@gmail.com>
filter/rastertopclm.c
filter/rastertopdf.c

index e5973f6a1afe87b702927d8109e97dad4038beb7..e5c33eeb8b5d560abadf7b8e314e58acd13befa8 100644 (file)
@@ -7,7 +7,8 @@
  * Include necessary headers...
  */
 
-#include "filter.h"
+#include <cupsfilters/filter.h>
+#include <signal.h>
 
 
 /*
 static int JobCanceled = 0;/* Set to 1 on SIGTERM */
 
 /*
- * 'main()' - Main entry and processing of driver.
+ * Local functions...
  */
 
-int main(int argc, char *argv[])
+static void            cancel_job(int sig);
+
+
+/*
+ * 'main()' - Main entry.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line args */
+     char *argv[])                     /* I - Command-line arguments */
 {
-  int ret;
+  int           ret;
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+  struct sigaction action;             /* Actions for POSIX signals */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+
+ /*
+  * Register a signal handler to cleanly cancel a job.
+  */
+
+#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+  sigset(SIGTERM, cancel_job);
+#elif defined(HAVE_SIGACTION)
+  memset(&action, 0, sizeof(action));
+
+  sigemptyset(&action.sa_mask);
+  action.sa_handler = cancel_job;
+  sigaction(SIGTERM, &action, NULL);
+#else
+  signal(SIGTERM, cancel_job);
+#endif /* HAVE_SIGSET */
 
   /*
    * Fire up the rastertopdf() filter function.
@@ -36,3 +65,15 @@ int main(int argc, char *argv[])
 
   return (ret);
 }
+
+/*
+ * 'cancel_job()' - Flag the job as canceled.
+ */
+
+static void
+cancel_job(int sig)                    /* I - Signal number (unused) */
+{
+  (void)sig;
+
+  JobCanceled = 1;
+}
index 65d932b7b6479c94020e56037812e9ee53fb3cae..b465e3633665254fb1efb530fe9379ddd7393618 100644 (file)
@@ -7,7 +7,8 @@
  * Include necessary headers...
  */
 
-#include "filter.h"
+#include <cupsfilters/filter.h>
+#include <signal.h>
 
 
 /*
 static int JobCanceled = 0;/* Set to 1 on SIGTERM */
 
 /*
- * 'main()' - Main entry and processing of driver.
+ * Local functions...
  */
 
-int main(int argc, char *argv[])
+static void            cancel_job(int sig);
+
+
+/*
+ * 'main()' - Main entry.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line args */
+     char *argv[])                     /* I - Command-line arguments */
 {
-  int ret;
+  int           ret;
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+  struct sigaction action;             /* Actions for POSIX signals */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+
+ /*
+  * Register a signal handler to cleanly cancel a job.
+  */
+
+#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+  sigset(SIGTERM, cancel_job);
+#elif defined(HAVE_SIGACTION)
+  memset(&action, 0, sizeof(action));
+
+  sigemptyset(&action.sa_mask);
+  action.sa_handler = cancel_job;
+  sigaction(SIGTERM, &action, NULL);
+#else
+  signal(SIGTERM, cancel_job);
+#endif /* HAVE_SIGSET */
 
   /*
    * Fire up the rastertopdf() filter function.
@@ -36,3 +65,15 @@ int main(int argc, char *argv[])
 
   return (ret);
 }
+
+/*
+ * 'cancel_job()' - Flag the job as canceled.
+ */
+
+static void
+cancel_job(int sig)                    /* I - Signal number (unused) */
+{
+  (void)sig;
+
+  JobCanceled = 1;
+}