Blame lang/cpp/src/util.h

Packit d7e8d0
/*
Packit d7e8d0
  util.h - some inline helper functions
Packit d7e8d0
  Copyright (C) 2004 Klarälvdalens Datakonsult AB
Packit d7e8d0
  2016 Bundesamt für Sicherheit in der Informationstechnik
Packit d7e8d0
  Software engineering by Intevation GmbH
Packit d7e8d0
Packit d7e8d0
  This file is part of GPGME++.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is free software; you can redistribute it and/or
Packit d7e8d0
  modify it under the terms of the GNU Library General Public
Packit d7e8d0
  License as published by the Free Software Foundation; either
Packit d7e8d0
  version 2 of the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is distributed in the hope that it will be useful,
Packit d7e8d0
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d7e8d0
  GNU Library General Public License for more details.
Packit d7e8d0
Packit d7e8d0
  You should have received a copy of the GNU Library General Public License
Packit d7e8d0
  along with GPGME++; see the file COPYING.LIB.  If not, write to the
Packit d7e8d0
  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d7e8d0
  Boston, MA 02110-1301, USA.
Packit d7e8d0
*/
Packit d7e8d0
Packit d7e8d0
// -*- c++ -*-
Packit d7e8d0
#ifndef __GPGMEPP_UTIL_H__
Packit d7e8d0
#define __GPGMEPP_UTIL_H__
Packit d7e8d0
Packit d7e8d0
#include "global.h"
Packit d7e8d0
#include "notation.h"
Packit d7e8d0
Packit d7e8d0
#include <gpgme.h>
Packit d7e8d0
Packit d7e8d0
#ifndef NDEBUG
Packit d7e8d0
#include <iostream>
Packit d7e8d0
#endif
Packit d7e8d0
#include <sstream>
Packit d7e8d0
#include <string>
Packit d7e8d0
Packit d7e8d0
static inline const char *protect(const char *s)
Packit d7e8d0
{
Packit d7e8d0
    return s ? s : "<null>" ;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline gpgme_error_t make_error(gpgme_err_code_t code)
Packit d7e8d0
{
Packit d7e8d0
    return gpgme_err_make((gpgme_err_source_t)22, code);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline unsigned long to_pid(const std::string &s)
Packit d7e8d0
{
Packit d7e8d0
    std::stringstream ss(s);
Packit d7e8d0
    unsigned int result;
Packit d7e8d0
    if (ss >> result) {
Packit d7e8d0
        return result;
Packit d7e8d0
    } else {
Packit d7e8d0
        return 0U;
Packit d7e8d0
    }
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline gpgme_keylist_mode_t add_to_gpgme_keylist_mode_t(unsigned int oldmode, unsigned int newmodes)
Packit d7e8d0
{
Packit d7e8d0
    if (newmodes & GpgME::Local) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_LOCAL;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::Extern) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_EXTERN;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::Signatures) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_SIGS;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::SignatureNotations) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_SIG_NOTATIONS;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::Ephemeral) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_EPHEMERAL;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::Validate) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_VALIDATE;
Packit d7e8d0
    }
Packit d7e8d0
    if (newmodes & GpgME::WithTofu) {
Packit d7e8d0
        oldmode |= GPGME_KEYLIST_MODE_WITH_TOFU;
Packit d7e8d0
    }
Packit d7e8d0
#ifndef NDEBUG
Packit d7e8d0
    if (newmodes & ~(GpgME::Local | GpgME::Extern | GpgME::Signatures | GpgME::SignatureNotations | GpgME::Ephemeral | GpgME::Validate)) {
Packit d7e8d0
        //std::cerr << "GpgME::Context: keylist mode must be one of Local, "
Packit d7e8d0
        //"Extern, Signatures, SignatureNotations, or Validate, or a combination thereof!" << std::endl;
Packit d7e8d0
    }
Packit d7e8d0
#endif
Packit d7e8d0
    return static_cast<gpgme_keylist_mode_t>(oldmode);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline unsigned int convert_from_gpgme_keylist_mode_t(unsigned int mode)
Packit d7e8d0
{
Packit d7e8d0
    unsigned int result = 0;
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_LOCAL) {
Packit d7e8d0
        result |= GpgME::Local;
Packit d7e8d0
    }
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_EXTERN) {
Packit d7e8d0
        result |= GpgME::Extern;
Packit d7e8d0
    }
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_SIGS) {
Packit d7e8d0
        result |= GpgME::Signatures;
Packit d7e8d0
    }
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS) {
Packit d7e8d0
        result |= GpgME::SignatureNotations;
Packit d7e8d0
    }
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_EPHEMERAL) {
Packit d7e8d0
        result |= GpgME::Ephemeral;
Packit d7e8d0
    }
Packit d7e8d0
    if (mode & GPGME_KEYLIST_MODE_VALIDATE) {
Packit d7e8d0
        result |= GpgME::Validate;
Packit d7e8d0
    }
Packit d7e8d0
#ifndef NDEBUG
Packit d7e8d0
    if (mode & ~(GPGME_KEYLIST_MODE_LOCAL |
Packit d7e8d0
                 GPGME_KEYLIST_MODE_EXTERN |
Packit d7e8d0
                 GPGME_KEYLIST_MODE_SIG_NOTATIONS |
Packit d7e8d0
                 GPGME_KEYLIST_MODE_EPHEMERAL |
Packit d7e8d0
                 GPGME_KEYLIST_MODE_VALIDATE |
Packit d7e8d0
                 GPGME_KEYLIST_MODE_SIGS)) {
Packit d7e8d0
        //std::cerr << "GpgME: WARNING: gpgme_get_keylist_mode() returned an unknown flag!" << std::endl;
Packit d7e8d0
    }
Packit d7e8d0
#endif // NDEBUG
Packit d7e8d0
    return result;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline GpgME::Notation::Flags convert_from_gpgme_sig_notation_flags_t(unsigned int flags)
Packit d7e8d0
{
Packit d7e8d0
    unsigned int result = 0;
Packit d7e8d0
    if (flags & GPGME_SIG_NOTATION_HUMAN_READABLE) {
Packit d7e8d0
        result |= GpgME::Notation::HumanReadable ;
Packit d7e8d0
    }
Packit d7e8d0
    if (flags & GPGME_SIG_NOTATION_CRITICAL) {
Packit d7e8d0
        result |= GpgME::Notation::Critical ;
Packit d7e8d0
    }
Packit d7e8d0
    return static_cast<GpgME::Notation::Flags>(result);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
static inline gpgme_sig_notation_flags_t  add_to_gpgme_sig_notation_flags_t(unsigned int oldflags, unsigned int newflags)
Packit d7e8d0
{
Packit d7e8d0
    unsigned int result = oldflags;
Packit d7e8d0
    if (newflags & GpgME::Notation::HumanReadable) {
Packit d7e8d0
        result |= GPGME_SIG_NOTATION_HUMAN_READABLE;
Packit d7e8d0
    }
Packit d7e8d0
    if (newflags & GpgME::Notation::Critical) {
Packit d7e8d0
        result |= GPGME_SIG_NOTATION_CRITICAL;
Packit d7e8d0
    }
Packit d7e8d0
    return static_cast<gpgme_sig_notation_flags_t>(result);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
#endif // __GPGMEPP_UTIL_H__