LCOV - code coverage report
Current view: top level - source3/printing - print_aix.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 0 1 0.0 %
Date: 2024-04-21 15:09:00 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /* 
       2             :    AIX-specific printcap loading
       3             :    Copyright (C) Jean-Pierre.Boulard@univ-rennes1.fr      1996
       4             : 
       5             :    This program is free software; you can redistribute it and/or modify
       6             :    it under the terms of the GNU General Public License as published by
       7             :    the Free Software Foundation; either version 3 of the License, or
       8             :    (at your option) any later version.
       9             :    
      10             :    This program is distributed in the hope that it will be useful,
      11             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             :    GNU General Public License for more details.
      14             :    
      15             :    You should have received a copy of the GNU General Public License
      16             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.
      17             : */
      18             : 
      19             : /*
      20             :  * This module implements AIX-specific printcap loading.  Most of the code
      21             :  * here was originally provided by Jean-Pierre.Boulard@univ-rennes1.fr in
      22             :  * the Samba 1.9.14 release, and was formerly contained in pcap.c.  It has
      23             :  * been moved here and condensed as part of a larger effort to clean up and
      24             :  * simplify the printcap code.    -- Rob Foehl, 2004/12/06
      25             :  */
      26             : 
      27             : #include "includes.h"
      28             : #include "system/filesys.h"
      29             : #include "printing/pcap.h"
      30             : 
      31             : #ifdef AIX
      32             : bool aix_cache_reload(struct pcap_cache **_pcache)
      33             : {
      34             :         int iEtat;
      35             :         FILE *pfile;
      36             :         char *line = NULL, *p;
      37             :         char *name = NULL;
      38             :         struct pcap_cache *pcache = NULL;
      39             :         TALLOC_CTX *ctx = talloc_init("aix_cache_reload");
      40             : 
      41             :         if (!ctx) {
      42             :                 return false;
      43             :         }
      44             : 
      45             :         DEBUG(5, ("reloading aix printcap cache\n"));
      46             : 
      47             :         if ((pfile = fopen(lp_printcapname(), "r")) == NULL) {
      48             :                 DEBUG(0,( "Unable to open qconfig file %s for read!\n", lp_printcapname()));
      49             :                 TALLOC_FREE(ctx);
      50             :                 return false;
      51             :         }
      52             : 
      53             :         iEtat = 0;
      54             :         /* scan qconfig file for searching <printername>: */
      55             :         while (line = fgets_slash(ctx, NULL, 1024, pfile)) {
      56             :                 bool ok;
      57             : 
      58             :                 if (*line == '*' || *line == 0) {
      59             :                         TALLOC_FREE(line);
      60             :                         continue;
      61             :                 }
      62             : 
      63             :                 switch (iEtat) {
      64             :                 case 0: /* locate an entry */
      65             :                         if (*line == '\t' || *line == ' ') {
      66             :                                 TALLOC_FREE(line);
      67             :                                 continue;
      68             :                         }
      69             : 
      70             :                         if ((p = strchr_m(line, ':'))) {
      71             :                                 char *saveptr;
      72             :                                 *p = '\0';
      73             :                                 p = strtok_r(line, ":", &saveptr);
      74             :                                 if (strcmp(p, "bsh") != 0) {
      75             :                                         name = talloc_strdup(ctx, p);
      76             :                                         if (!name) {
      77             :                                                 pcap_cache_destroy_specific(&pcache);
      78             :                                                 TALLOC_FREE(line);
      79             :                                                 fclose(pfile);
      80             :                                                 TALLOC_FREE(ctx);
      81             :                                                 return false;
      82             :                                         }
      83             :                                         iEtat = 1;
      84             :                                         continue;
      85             :                                 }
      86             :                          }
      87             :                          break;
      88             : 
      89             :                 case 1: /* scanning device stanza */
      90             :                         if (*line == '*' || *line == 0)
      91             :                                 continue;
      92             : 
      93             :                         if (*line != '\t' && *line != ' ') {
      94             :                                 /* name is found without stanza device  */
      95             :                                 /* probably a good printer ???          */
      96             :                                 iEtat = 0;
      97             :                                 ok = pcap_cache_add_specific(&pcache,
      98             :                                                              name, NULL, NULL);
      99             :                                 if (!ok) {
     100             :                                         pcap_cache_destroy_specific(&pcache);
     101             :                                         TALLOC_FREE(line);
     102             :                                         fclose(pfile);
     103             :                                         TALLOC_FREE(ctx);
     104             :                                         return false;
     105             :                                 }
     106             :                                 continue;
     107             :                         }
     108             : 
     109             :                         if (strstr_m(line, "backend")) {
     110             :                                 /* it's a device, not a virtual printer */
     111             :                                 iEtat = 0;
     112             :                         } else if (strstr_m(line, "device")) {
     113             :                                 /* it's a good virtual printer */
     114             :                                 iEtat = 0;
     115             :                                 ok = pcap_cache_add_specific(&pcache,
     116             :                                                              name, NULL, NULL);
     117             :                                 if (!ok) {
     118             :                                         pcap_cache_destroy_specific(&pcache);
     119             :                                         SAFE_FREE(line);
     120             :                                         fclose(pfile);
     121             :                                         TALLOC_FREE(ctx);
     122             :                                         return false;
     123             :                                 }
     124             :                                 continue;
     125             :                         }
     126             :                         break;
     127             :                 }
     128             :         }
     129             : 
     130             :         *_pcache = pcache;
     131             :         fclose(pfile);
     132             :         TALLOC_FREE(ctx);
     133             :         return true;
     134             : }
     135             : 
     136             : #else
     137             : /* this keeps fussy compilers happy */
     138             :  void print_aix_dummy(void);
     139           0 :  void print_aix_dummy(void) {}
     140             : #endif /* AIX */

Generated by: LCOV version 1.14