diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/wprclean2.c | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/wprclean2.c')
-rw-r--r-- | support/dktools/wprclean2.c | 1189 |
1 files changed, 0 insertions, 1189 deletions
diff --git a/support/dktools/wprclean2.c b/support/dktools/wprclean2.c deleted file mode 100644 index 057f699566..0000000000 --- a/support/dktools/wprclean2.c +++ /dev/null @@ -1,1189 +0,0 @@ -/* -Copyright (C) 2017-2020, Dirk Krause -SPDX-License-Identifier: BSD-3-Clause -*/ - -/* - WARNING: This file was generated by the dkct program (see - http://dktools.sourceforge.net/ for details). - Changes you make here will be lost if dkct is run again! - You should modify the original source and run dkct on it. - Original source: wprclean2.ctr -*/ - - -#line 7 "wprclean2.ctr" - -/** @file wprclean.c Cleanup Windows print queues. -*/ - -#include "dk4conf.h" - -#include <stdio.h> - -#if DK4_ON_WINDOWS -#ifndef WINDOWS_H_INCLUDED -#include <windows.h> -#define WINDOWS_H_INCLUDED -#endif -#endif - -#if DK4_HAVE_STDLIB_H -#ifndef STDLIB_H_INCLUDED -#include <stdlib.h> -#define STDLIB_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_UNISTD_H -#ifndef UNISTD_H_INCLUDED -#include <unistd.h> -#define UNISTD_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_PROCESS_H -#ifndef PROCESS_H_INCLUDED -#include <process.h> -#define PROCESS_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_IO_H -#ifndef IO_H_INCLUDED -#include <io.h> -#define IO_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_FCNTL_H -#ifndef FCNTL_H_INCLUDED -#include <fcntl.h> -#define FCNTL_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_SYS_TYPES_H -#ifndef SYS_TYPES_H_INCLUDED -#include <sys/types.h> -#define SYS_TYPES_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_SIGNAL_H -#ifndef SIGNAL_H_INCLUDED -#include <signal.h> -#define SIGNAL_H_INCLUDED 1 -#endif -#endif - -#include "dk4types.h" -#include "dk4const.h" -#include "dk4error.h" -#include "dk4mem.h" -#include "dk4mema.h" -#include "dk4strd.h" -#include "dk4app.h" -#include "dk4aopt.h" -#include "dk4vers.h" -#include "dk4hnamed.h" -#include "dk4user.h" - -#ifndef DK4WMAIN_H_INCLUDED -#include "dk4wmain.h" -#endif - - - - -#line 89 "wprclean2.ctr" - - - -/** Information required to delete a print job. -*/ -typedef struct { - DWORD position; /**< Position in queue. */ - DWORD jobid; /**< Job ID. */ -} wprclean_printjob_t; - - - -/** Constant text strings used by program, not localized. -*/ -static const dkChar * const wprclean_kwnl[] = { -/* 0 */ -dkT("dktools"), - -/* 1 */ -dkT("wprclean.txt"), - -/* 2 */ -dkT("wprclean.str"), - -NULL - - -#line 118 "wprclean2.ctr" -}; - - - -/** Constant texts used by the program, replaced by localized versions. -*/ -static const dkChar * const wprclean_kw_def[] = { -/* 0 */ -dkT("This program is only available for the Windows platform!"), - -/* 1 */ -dkT("Unnamed printer found in enumeration!"), - -/* 2 */ -dkT("Failed to enumerate print queues!"), - -/* 3 */ -dkT("Failed to open print queue \""), - -/* 4 */ -dkT("\"!"), - -/* 5 */ -dkT("Failed to obtain size for print queue information \""), - -/* 6 */ -dkT("\"!"), - -/* 7 */ -dkT("Failed to enumerate jobs for print queue \""), - -/* 8 */ -dkT("\"!"), - -/* 9 */ -dkT("Failed to obtain number of jobs for queue \""), - -/* 10 */ -dkT("\"!"), - -/* 11 */ -dkT("Failed to remove job from queue \""), - -/* 12 */ -dkT("\"!"), - -NULL - - -#line 164 "wprclean2.ctr" -}; - - - -static const dkChar * const wprclean_help_text[] = { -/* 0 */ -dkT(""), - -/* 1 */ -dkT("Windows print queue cleanup"), - -/* 2 */ -dkT(""), - -/* 3 */ -dkT("wprclean [-c]"), - -/* 4 */ -dkT(""), - -/* 5 */ -dkT("Options:"), - -/* 6 */ -dkT("-c\t--computer\tDelete print jobs submitted from this computer only."), - -/* 7 */ -dkT(""), - -/* 8 */ -dkT("\t--help\t\tShow this short help text."), - -/* 9 */ -dkT("\t--manual\t*** SHOW FULL MANUAL ***"), - -/* 10 */ -dkT("\t--version\tShow version information."), - -/* 11 */ -dkT("\t--license\tShow license information."), - -NULL - - -#line 183 "wprclean2.ctr" -}; - - - - -/** License conditions. -*/ -static const dkChar * const wprclean_license_text[] = { -dkT(""), -dkT("This software uses code from the following projects, either directly or as"), -dkT("a library:"), -dkT(""), -dkT("dktools\t\tDirk Krause's tools and libraries."), -dkT("\t\tSee http://sourceforge.net/p/dktools/wiki/Home/"), -dkT("\t\tfor more information."), -#if DK4_HAVE_ZLIB_H -dkT(""), -dkT("zlib\t\tData compression library."), -dkT("\t\tSee http://www.zlib.net/ for more information."), -#endif -#if DK4_HAVE_BZLIB_H -dkT(""), -dkT("bzip2\t\tData compression program and library."), -dkT("\t\tSee http://www.bzip.org/ for more information."), -#endif -dkT(""), -dkT("All the licenses below apply to the program."), -dkT("Licenses for used libraries are shown as found on my Scientific Linux 6.x"), -dkT("computer in the /usr/share/doc directory on 2015-04-01. Check the project"), -dkT("homepages of the used libraries for additional information and/or updated"), -dkT("license terms."), -dkT(""), -dkT(""), -dkT("DK tools and libraries license"), -dkT("=============================="), -dkT("Copyright (c) 2015-2016, Dirk Krause"), -dkT("All rights reserved."), -dkT(""), -dkT("Redistribution and use in source and binary forms, with or without"), -dkT("modification, are permitted provided that the following conditions are met:"), -dkT(""), -dkT("1. Redistributions of source code must retain the above copyright notice,"), -dkT(" this list of conditions and the following disclaimer."), -dkT("2. Redistributions in binary form must reproduce the above copyright"), -dkT(" notice, this list of conditions and the following disclaimer in the"), -dkT(" documentation and/or other materials provided with the distribution."), -dkT("3. Neither the name of the copyright holder nor the names of its"), -dkT(" contributors may be used to endorse or promote products derived from"), -dkT(" this software without specific prior written permission."), -dkT(""), -dkT("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"), -dkT("``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"), -dkT("LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"), -dkT("A PARTICULAR PURPOSE ARE DISCLAIMED."), -dkT("IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY"), -dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES"), -dkT("(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR"), -dkT("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER"), -dkT("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT"), -dkT("LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY"), -dkT("OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"), -dkT("SUCH DAMAGE."), -dkT(""), -#if DK4_HAVE_ZLIB_H -dkT(""), -dkT(""), -dkT("Zlib license"), -dkT("============"), -dkT("(C) 1995-2004 Jean-loup Gailly and Mark Adler"), -dkT(""), -dkT("This software is provided 'as-is', without any express or implied"), -dkT("warranty. In no event will the authors be held liable for any damages"), -dkT("arising from the use of this software."), -dkT(""), -dkT("Permission is granted to anyone to use this software for any purpose,"), -dkT("including commercial applications, and to alter it and redistribute it"), -dkT("freely, subject to the following restrictions:"), -dkT(""), -dkT("1. The origin of this software must not be misrepresented; you must not"), -dkT(" claim that you wrote the original software. If you use this software"), -dkT(" in a product, an acknowledgment in the product documentation would be"), -dkT(" appreciated but is not required."), -dkT("2. Altered source versions must be plainly marked as such, and must not be"), -dkT(" misrepresented as being the original software."), -dkT("3. This notice may not be removed or altered from any source distribution."), -dkT(""), -dkT("Jean-loup Gailly Mark Adler"), -dkT("jloup@gzip.org madler@alumni.caltech.edu"), -#endif -#if DK4_HAVE_BZLIB_H -dkT(""), -dkT(""), -dkT("Bzip2 and libbzip2 library license"), -dkT("=================================="), -dkT("This program, \"bzip2\", the associated library \"libbzip2\", and all"), -dkT("documentation, are copyright (C) 1996-2007 Julian R Seward. All"), -dkT("rights reserved."), -dkT(""), -dkT("Redistribution and use in source and binary forms, with or without"), -dkT("modification, are permitted provided that the following conditions"), -dkT("are met:"), -dkT(""), -dkT("1. Redistributions of source code must retain the above copyright"), -dkT(" notice, this list of conditions and the following disclaimer."), -dkT(""), -dkT("2. The origin of this software must not be misrepresented; you must "), -dkT(" not claim that you wrote the original software. If you use this "), -dkT(" software in a product, an acknowledgment in the product "), -dkT(" documentation would be appreciated but is not required."), -dkT(""), -dkT("3. Altered source versions must be plainly marked as such, and must"), -dkT(" not be misrepresented as being the original software."), -dkT(""), -dkT("4. The name of the author may not be used to endorse or promote "), -dkT(" products derived from this software without specific prior written "), -dkT(" permission."), -dkT(""), -dkT("THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS"), -dkT("OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED"), -dkT("WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE"), -dkT("ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY"), -dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL"), -dkT("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE"), -dkT("GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"), -dkT("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,"), -dkT("WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING"), -dkT("NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS"), -dkT("SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), -dkT(""), -dkT("Julian Seward, jseward@bzip.org"), -dkT("bzip2/libbzip2 version 1.0.5 of 10 December 2007"), -#endif -dkT(""), -NULL - - -#line 318 "wprclean2.ctr" -}; - - - -/** Full computer name (including domain). -*/ -static dkChar host_long[256]; - - - -/** Short computer name (just host name). -*/ -static dkChar host_short[256]; - - - -/** User name. -*/ -static dkChar user_name[256]; - - - -/** Options used by the program. -*/ -static const dk4_option_specification_t wprclean_options[] = { - - /* Delete jobs submitted from local computer only. - */ - { dkT('c'), dkT("computer"), DK4_OPT_ARG_NONE }, - - /* Produce verbose output. - */ - { dkT('v'), dkT("verbose"), DK4_OPT_ARG_NONE } -}; - - - -/** Application structure. -*/ -static dk4_app_t *app = NULL; - - - -/** Queue storage. -*/ -static dk4_sto_t *s_q = NULL; - - - -/** Iterator for queue storage. -*/ -static dk4_sto_it_t *i_q = NULL; - - - -/** Message texts, replaced by localized version if available. -*/ -static const dkChar * const *msg = wprclean_kw_def; - - -/** Number of elements in the wprclean_options array. -*/ -static const size_t wprclean_sz_options = -sizeof(wprclean_options)/sizeof(dk4_option_specification_t); - - - -/** Size of user_name buffer. -*/ -static const size_t sz_user_name = DK4_SIZEOF(user_name,dkChar); - - - -/** Number of elements in the wprclean_kw_def array. -*/ -static size_t sz_msg = -(sizeof(wprclean_kw_def)/sizeof(DK4_PDKCHAR) - 1); - - - -/** Size of short host name buffer. -*/ -static const size_t sz_host_short = DK4_SIZEOF(host_short,dkChar); - - - -/** Flag: Use separated short host name. -*/ -static int have_short_host = 0; - - - -/** Flag: Delete jobs submitted from current host only. -*/ -static int only_this_host = 0; - - - -/** Exit status code returned by the program. -*/ -static int exval = EXIT_FAILURE; - - - -/** Flag: Verbose output. -*/ -static int verbose = 0; - - - -/* This program is only available for the Windows platform! -*/ -#if DK4_ON_WINDOWS - - - -/** Check presence of -c option, retrieve host name and short - host name if necessary. -*/ -static -void -check_options(void) -{ - dkChar *ptr; - - -#line 443 "wprclean2.ctr" - host_long[0] = dkT('\0'); - host_short[0] = dkT('\0'); - user_name[0] = dkT('\0'); - if (0 != dk4app_opt_is_set_short(app, dkT('v'), NULL)) { - verbose = 1; - -#line 448 "wprclean2.ctr" - } - if (0 != dk4app_opt_is_set_short(app, dkT('c'), NULL)) { - -#line 450 "wprclean2.ctr" - if (0 != dk4hostname(host_long, DK4_SIZEOF(host_long,dkChar), NULL)) { - only_this_host = 1; - -#line 452 "wprclean2.ctr" - if (0 != dk4str_cpy_s(host_short, sz_host_short, host_long, NULL)) { - ptr = dk4str_chr(host_short, dkT('.')); - -#line 454 "wprclean2.ctr" - if (NULL != ptr) { - -#line 455 "wprclean2.ctr" - *ptr = dkT('\0'); - have_short_host = 1; - } -#if TRACE_DEBUG - else { - -#line 460 "wprclean2.ctr" - } -#endif - } -#if TRACE_DEBUG - else { - -#line 465 "wprclean2.ctr" - } -#endif - } -#if TRACE_DEBUG - else { - -#line 470 "wprclean2.ctr" - } -#endif - } - - -#line 474 "wprclean2.ctr" -} - - - -/** Compare two queue names. - @param l Left queue name. - @param r Right queue name. - @param cr Comparison criteria, unused. - @return Comparison result. -*/ -static -int -compare_queues(const void *l, const void *r, int cr) -{ - int back = 0; - if (NULL != l) { - if (NULL != r) { - back = dk4str_cmp((const dkChar *)l, (const dkChar *)r); - if (-1 > back) back = -1; - if ( 1 < back) back = 1; - } else back = 1; - } else { - if (NULL != r) back = -1; - } - return back; -} - - - -/** Compare two print jobs within the same queue. - @param l Left job. - @param r Right job. - @param cr Comparison criteria (ignored). - @return Comparison result (inverted sort order). -*/ -static -int -compare_print_jobs(const void *l, const void *r, int cr) -{ - const wprclean_printjob_t *jl = NULL; - const wprclean_printjob_t *jr = NULL; - int back = 0; - if (NULL != l) { - if (NULL != r) { - jl = (const wprclean_printjob_t *)l; - jr = (const wprclean_printjob_t *)r; - if (jl->position > jr->position) { - back = -1; - } else { - if (jr->position > jl->position) { - back = 1; - } else { - if (jl->jobid > jr->jobid) { - back = -1; - } else { - if (jr->jobid > jl->jobid) { - back = 1; - } - } - } - } - } else back = 1; - } else { - if (NULL != r) back = -1; - } - return back; -} - - -/** Allocate resources for list of print queues and iterator. - @return 1 on success, 0 on error. -*/ -static -int -setup_for_queue_list(void) -{ - int back = 0; - - -#line 552 "wprclean2.ctr" - s_q = dk4sto_open(NULL); - if (NULL != s_q) { - -#line 554 "wprclean2.ctr" - dk4sto_set_comp(s_q, compare_queues, 0); - i_q = dk4sto_it_open(s_q, NULL); - if (NULL != i_q) { - -#line 557 "wprclean2.ctr" - back = 1; - } -#if TRACE_DEBUG - else { - -#line 561 "wprclean2.ctr" - } -#endif - } -#if TRACE_DEBUG - else { - -#line 566 "wprclean2.ctr" - } -#endif - - -#line 569 "wprclean2.ctr" - return back; -} - - - -/** Clean up print queues storage and iterator. -*/ -static -void -cleanup_for_queue_list(void) -{ - dkChar *p; - - -#line 582 "wprclean2.ctr" - /* Release all queue names saved, close iterator. - */ - if (NULL != i_q) { - -#line 585 "wprclean2.ctr" - dk4sto_it_reset(i_q); - do { - p = (dkChar *)dk4sto_it_next(i_q); - if (NULL != p) { - dk4mem_free(p); - } - } while (NULL != p); - -#line 592 "wprclean2.ctr" - dk4sto_it_close(i_q); i_q = NULL; - } - /* Close storage. - */ - if (NULL != s_q) { - -#line 597 "wprclean2.ctr" - dk4sto_close(s_q); s_q = NULL; - } - - -#line 600 "wprclean2.ctr" -} - - - -/** Retrieve list of print queue names. - @return 1 on success, 0 on error -*/ -static -int -retrieve_queue_list(void) -{ -#if DK4_ON_WINDOWS - char *peb; /* Result buffer */ - dkChar *pn; /* Printer name */ -#if DK4_CHAR_SIZE > 1 - PRINTER_INFO_2W *pi2; /* Printer information array */ -#else - PRINTER_INFO_2A *pi2; /* Printer information array */ -#endif - DWORD cbNeeded; /* Bytes needed */ - DWORD cbReturned; /* Bytes returned */ - DWORD szPeb; /* Size of peb */ - DWORD i; /* Index current print queue */ - BOOL res; /* Operation result */ - int back = 0; - - -#line 626 "wprclean2.ctr" - cbNeeded = cbReturned = szPeb = (DWORD)0UL; -#if DK4_CHAR_SIZE > 1 - EnumPrintersW(PRINTER_ENUM_LOCAL,NULL,2,NULL,szPeb,&cbNeeded,&cbReturned); -#else - EnumPrintersA(PRINTER_ENUM_LOCAL,NULL,2,NULL,szPeb,&cbNeeded,&cbReturned); -#endif - if ((DWORD)0UL < cbNeeded) { - szPeb = cbNeeded; - peb = dk4mem_new_app(char, (size_t)cbNeeded, app); - if (NULL != peb) { - cbNeeded = cbReturned = (DWORD)0UL; -#if DK4_CHAR_SIZE > 1 - res = EnumPrintersW( - PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)peb,szPeb,&cbNeeded,&cbReturned - ); -#else - res = EnumPrintersA( - PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)peb,szPeb,&cbNeeded,&cbReturned - ); -#endif - if (res) { - if ((DWORD)0UL < cbReturned) { - pi2 = (PRINTER_INFO_2 *)peb; - back = 1; - for (i = (DWORD)0UL; i < cbReturned; i++) { - if (NULL != pi2->pPrinterName) { - pn = dk4str_dup(pi2->pPrinterName, NULL); - if (NULL != pn) { - if (0 == dk4sto_add(s_q, pn, NULL)) { - dk4mem_free(pn); - -#line 656 "wprclean2.ctr" - back = 0; - exval = EXIT_FAILURE; - /* ERROR: Memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - } - } else { - -#line 662 "wprclean2.ctr" - back = 0; - exval = EXIT_FAILURE; - /* ERROR: Memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - } - } else { - -#line 668 "wprclean2.ctr" - back = 0; - exval = EXIT_FAILURE; - /* ERROR: Invalid printer configuration */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 1); - } - pi2++; - } - } else { - -#line 676 "wprclean2.ctr" - } - } else { - -#line 678 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Printer enumeration failed */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 2); - } - dk4mem_release(peb); - } else { - -#line 684 "wprclean2.ctr" - exval = EXIT_FAILURE; - } - } else { - -#line 687 "wprclean2.ctr" - } - - -#line 689 "wprclean2.ctr" - return back; -#else - return 1; -#endif -} - - - -/** Remove jobs from one print queue. -*/ -static -void -handle_one_queue(const dkChar *pn) -{ - char *pc1 = NULL; /* First buffer */ - char *pc2 = NULL; /* Second buffer */ - dk4_sto_t *s_j = NULL; /* Jobs container */ - dk4_sto_it_t *i_j = NULL; /* Jobs iterator */ -#if DK4_CHAR_SIZE > 1 - PRINTER_INFO_2W *pi2 = NULL; /* Printer info */ - JOB_INFO_1W *ji1 = NULL; /* Print job info */ -#else - PRINTER_INFO_2A *pi2 = NULL; /* Printer info */ - JOB_INFO_1A *ji1 = NULL; /* Print job info */ -#endif - wprclean_printjob_t *pj = NULL; /* New print job */ - HANDLE h_pr = INVALID_HANDLE_VALUE; /* Printer handle */ - DWORD sz1 = (DWORD)0UL; /* Size provided */ - DWORD sz2 = (DWORD)0UL; /* Size needed */ - DWORD sz3 = (DWORD)0UL; /* Size provided */ - DWORD sz4 = (DWORD)0UL; /* Size needed */ - DWORD sz5 = (DWORD)0UL; /* No print jobs */ - DWORD nJobs = (DWORD)0UL; /* Number of jobs */ - DWORD i = (DWORD)0UL; /* Current job index */ - int mm = 0; /* Machine matches */ - int um = 0; /* User matches */ - BOOL bres = FALSE; /* Printer open res */ - BOOL br1 = FALSE; /* GetPrinter res */ - BOOL br2 = FALSE; /* GetPrinter res */ - BOOL br3 = FALSE; /* EnumJobs res */ - BOOL br4 = FALSE; /* EnumJobs res */ - BOOL br5 = FALSE; /* SetJob res */ - - -#line 732 "wprclean2.ctr" - /* Prepare data structures. - */ - s_j = dk4sto_open(NULL); - if (NULL == s_j) { - -#line 736 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - goto finished; - } - dk4sto_set_comp(s_j, compare_print_jobs, 0); - i_j = dk4sto_it_open(s_j, NULL); - if (NULL == i_j) { - -#line 744 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - goto finished; - } - /* Open printer - */ -#if DK4_CHAR_SIZE > 1 - bres = OpenPrinterW(pn, &h_pr, NULL); -#else - bres = OpenPrinterA(pn, &h_pr, NULL); -#endif - if (!(bres)) { - -#line 757 "wprclean2.ctr" - h_pr = INVALID_HANDLE_VALUE; - exval = EXIT_FAILURE; - /* ERROR: Failed to open printer */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 3, 4, pn); - goto finished; - } - /* Retrieve number of jobs - */ -#if DK4_CHAR_SIZE > 1 - br1 = GetPrinterW(h_pr, 2, NULL, (DWORD)0UL, &sz1); -#else - br1 = GetPrinterA(h_pr, 2, NULL, (DWORD)0UL, &sz1); -#endif - if ((DWORD)0UL == sz1) { - -#line 771 "wprclean2.ctr" - - -#line 772 "wprclean2.ctr" - - -#line 773 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Failed to request print queue */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 5, 6, pn); - goto finished; - } - if ((DWORD)0UL == sz1) { - -#line 779 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Failed to request print queue */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 5, 6, pn); - goto finished; - } - pc1 = dk4mem_new_app(char,(size_t)sz1,app); - if (NULL == pc1) { - -#line 786 "wprclean2.ctr" - exval = EXIT_FAILURE; - goto finished; - } -#if DK4_CHAR_SIZE > 1 - br2 = GetPrinterW(h_pr, 2, pc1, sz1, &sz2); -#else - br2 = GetPrinterA(h_pr, 2, pc1, sz1, &sz2); -#endif - if (!(br2)) { - -#line 795 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: GetPrinter failed */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 9, 10, pn); - goto finished; - } - if (sz2 > sz1) { - -#line 801 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Number of bytes increased. */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 9, 10, pn); - goto finished; - } - pi2 = (PRINTER_INFO_2 *)pc1; - nJobs = pi2->cJobs; - if ((DWORD)0UL == nJobs) { - -#line 809 "wprclean2.ctr" - goto finished; - } - /* Retrieve job data and build sorted storage - */ -#if DK4_CHAR_SIZE > 1 - br3 = EnumJobsW( - h_pr, (DWORD)0UL, nJobs, 1, NULL, (DWORD)0UL, &sz3, &sz4 - ); -#else - br3 = EnumJobsW( - h_pr, (DWORD)0UL, nJobs, 1, NULL, (DWORD)0UL, &sz3, &sz4 - ); -#endif - if ((!(br3)) || ((DWORD)0UL == sz3)) { - -#line 823 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Failed to find required byte number */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn); - goto finished; - } - pc2 = dk4mem_new_app(char,(size_t)sz3,app); - if (NULL == pc2) { - -#line 830 "wprclean2.ctr" - exval = EXIT_FAILURE; - goto finished; - } - sz4 = (DWORD)0UL; -#if DK4_CHAR_SIZE > 1 - br4 = EnumJobsW( - h_pr, (DWORD)0UL, nJobs, 1, pc2, sz3, &sz4, &sz5 - ); -#else - br4 = EnumJobsW( - h_pr, (DWORD)0UL, nJobs, 1, pc2, sz3, &sz4, &sz5 - ); -#endif - if (!(br4)) { - -#line 844 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: EnumJobs */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn); - goto finished; - } - if (sz4 > sz3) { - -#line 850 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Number of bytes changed */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn); - goto finished; - } -#if DK4_CHAR_SIZE > 1 - ji1 = (JOB_INFO_1W *)pc2; -#else - ji1 = (JOB_INFO_1A *)pc2; -#endif - for (i = (DWORD)0UL; i < sz5; i++) { - mm = 1; - um = 1; - if (0 != only_this_host) { - -#line 864 "wprclean2.ctr" - if (NULL != ji1->pMachineName) { - -#line 865 "wprclean2.ctr" - if (0 != dk4str_casecmp(host_long, ji1->pMachineName)) { - mm = 0; - if (0 != have_short_host) { - -#line 868 "wprclean2.ctr" - if (0 == dk4str_casecmp(host_short, ji1->pMachineName)) { - mm = 1; - -#line 870 "wprclean2.ctr" - } - } - } - } - } - if (NULL != ji1->pUserName) { - if (0 != dk4str_casecmp(user_name, ji1->pUserName)) { - um = 0; - } - } - else { - -#line 881 "wprclean2.ctr" - um = 0; - } - if ((0 != mm) && (0 != um)) { - -#line 884 "wprclean2.ctr" - pj = dk4mem_new_app(wprclean_printjob_t,1,app); - if (NULL != pj) { - pj->position = i; - pj->jobid = ji1->JobId; - - -#line 889 "wprclean2.ctr" - if (0 == dk4sto_add(s_j, pj, NULL)) { - -#line 890 "wprclean2.ctr" - dk4mem_free(pj); - exval = EXIT_FAILURE; - /* ERROR: Memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - } - } else { - -#line 896 "wprclean2.ctr" - exval = EXIT_FAILURE; - } - } - ji1++; - } - /* Remove print jobs from queue - */ - dk4sto_it_reset(i_j); - do { - pj = (wprclean_printjob_t *)dk4sto_it_next(i_j); - if (NULL != pj) { - -#line 907 "wprclean2.ctr" -#if DK4_CHAR_SIZE > 1 - br5 = SetJobW(h_pr, pj->jobid, 0, NULL, JOB_CONTROL_DELETE); -#else - br5 = SetJobA(h_pr, pj->jobid, 0, NULL, JOB_CONTROL_DELETE); -#endif - if (!(br5)) { - -#line 913 "wprclean2.ctr" - exval = EXIT_FAILURE; - /* ERROR: Failed to remove job */ - dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 11, 12, pn); - } - else { - -#line 918 "wprclean2.ctr" - } - } - } while(NULL != pj); - - /* Final cleanup. - */ - finished: - if (NULL != pc2) { - dk4mem_free(pc2); - } - if (NULL != pc1) { - dk4mem_free(pc1); - } - if (bres) { - ClosePrinter(h_pr); - } - if (NULL != i_j) { - dk4sto_it_reset(i_j); - do { - pj = (wprclean_printjob_t *)dk4sto_it_next(i_j); - if (NULL != pj) { - dk4mem_free(pj); - } - } while(NULL != pj); - dk4sto_it_close(i_j); - } - if (NULL != s_j) { - dk4sto_close(s_j); - } - - -#line 948 "wprclean2.ctr" -} - - - -/** Remove all print jobs from local queues. -*/ -static -void -remove_all_print_jobs(void) -{ - dkChar *pn; - - check_options(); - if (0 != dk4user_get_logname(user_name, sz_user_name, 1, NULL)) { - if (setup_for_queue_list()) { - exval = EXIT_SUCCESS; - if (retrieve_queue_list()) { - dk4sto_it_reset(i_q); - do { - pn = (dkChar *)dk4sto_it_next(i_q); - if (NULL != pn) { - handle_one_queue(pn); - } - } while (NULL != pn); - } - } - cleanup_for_queue_list(); - } else { - } -} - -#endif - - - -/** Main function. - @param argc Number of command line arguments. - @param argv Command line arguments array. - @return 0 on success, all other values indicate errors. -*/ -#if DK4_CHAR_SIZE > 1 -int wmain(int argc, wchar_t *argv[]) -#else -int main(int argc, char *argv[]) -#endif -{ - - -#line 995 "wprclean2.ctr" - - -#line 996 "wprclean2.ctr" - app = dk4app_open_cmd( - argc, argv, wprclean_options, wprclean_sz_options, - wprclean_kwnl[0], DKT_VERSION_DK, - wprclean_kwnl[1], wprclean_help_text, wprclean_license_text - ); - if (NULL != app) { - sz_msg = dk4app_string_table_size(wprclean_kw_def); - msg = dk4app_string_table(app, wprclean_kwnl[2], wprclean_kw_def); - if (0 != dk4app_can_run_normally(app)) { -#if DK4_ON_WINDOWS - remove_all_print_jobs(); -#else - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0); -#endif - } else { - if (0 != dk4app_help_version_license(app)) { - exval = EXIT_SUCCESS; - } - } - dk4app_close(app); - } - - -#line 1018 "wprclean2.ctr" - - -#line 1019 "wprclean2.ctr" - exit(exval); return exval; -} - |