widget/gtk/nsCUPSShim.h
author Michael Kaply <mozilla@kaply.com>
Wed, 20 Feb 2019 19:44:05 +0000
changeset 516092 009f023e478cf643f46136951c78887e578ce02d
parent 508251 66eb1f485c1a3ea81372758bc92292c9428b17cd
child 533940 e1993a1f09ac53cd1a04fdf6a87f8cad8e44f73e
permissions -rw-r--r--
Bug 1522151 - Use correct region for regionOverrides. r=nalexander, a=lizzard Differential Revision: https://phabricator.services.mozilla.com/D17379

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ex: set tabstop=8 softtabstop=4 shiftwidth=4 expandtab: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsCUPSShim_h___
#define nsCUPSShim_h___

/* Various CUPS data types. We don't #include cups headers to avoid
 * requiring CUPS to be installed on the build host (and to avoid having
 * to test for CUPS in configure).
 */
typedef struct /**** Printer Options ****/
{
  char *name;  /* Name of option */
  char *value; /* Value of option */
} cups_option_t;

typedef struct /**** Destination ****/
{
  char *name,             /* Printer or class name */
      *instance;          /* Local instance name or nullptr */
  int is_default;         /* Is this printer the default? */
  int num_options;        /* Number of options */
  cups_option_t *options; /* Options */
} cups_dest_t;

typedef cups_dest_t *(*CupsGetDestType)(const char *printer,
                                        const char *instance, int num_dests,
                                        cups_dest_t *dests);
typedef int (*CupsGetDestsType)(cups_dest_t **dests);
typedef int (*CupsFreeDestsType)(int num_dests, cups_dest_t *dests);
typedef int (*CupsPrintFileType)(const char *printer, const char *filename,
                                 const char *title, int num_options,
                                 cups_option_t *options);
typedef int (*CupsTempFdType)(char *filename, int length);
typedef int (*CupsAddOptionType)(const char *name, const char *value,
                                 int num_options, cups_option_t **options);

struct PRLibrary;

/* Note: this class relies on static initialization. */
class nsCUPSShim {
 public:
  /**
   * Initialize this object. Attempt to load the CUPS shared
   * library and find function pointers for the supported
   * functions (see below).
   * @return false if the shared library could not be loaded, or if
   *                  any of the functions could not be found.
   *         true  for successful initialization.
   */
  bool Init();

  /**
   * @return true  if the object was initialized successfully.
   *         false otherwise.
   */
  bool IsInitialized() { return nullptr != mCupsLib; }

  /* Function pointers for supported functions. These are only
   * valid after successful initialization.
   */
  CupsAddOptionType mCupsAddOption;
  CupsFreeDestsType mCupsFreeDests;
  CupsGetDestType mCupsGetDest;
  CupsGetDestsType mCupsGetDests;
  CupsPrintFileType mCupsPrintFile;
  CupsTempFdType mCupsTempFd;

 private:
  PRLibrary *mCupsLib;
};

#endif /* nsCUPSShim_h___ */