LCOV - code coverage report
Current view: top level - lang/cpp/src - swdbresult.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 100 1.0 %
Date: 2018-11-14 16:53:58 Functions: 2 22 9.1 %

          Line data    Source code
       1             : /* swdbresult.cpp - wraps gpgme swdb result / query
       2             :   Copyright (C) 2016 by Bundesamt für Sicherheit in der Informationstechnik
       3             :   Software engineering by Intevation GmbH
       4             : 
       5             :   This file is part of GPGME++.
       6             : 
       7             :   GPGME++ is free software; you can redistribute it and/or
       8             :   modify it under the terms of the GNU Library General Public
       9             :   License as published by the Free Software Foundation; either
      10             :   version 2 of the License, or (at your option) any later version.
      11             : 
      12             :   GPGME++ is distributed in the hope that it will be useful,
      13             :   but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15             :   GNU Library General Public License for more details.
      16             : 
      17             :   You should have received a copy of the GNU Library General Public License
      18             :   along with GPGME++; see the file COPYING.LIB.  If not, write to the
      19             :   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
      20             :   Boston, MA 02110-1301, USA.
      21             : */
      22             : 
      23             : #ifdef HAVE_CONFIG_H
      24             :  #include "config.h"
      25             : #endif
      26             : 
      27             : #include "swdbresult.h"
      28             : 
      29             : #include <istream>
      30             : 
      31             : #include "error.h"
      32             : 
      33             : #include "gpgme.h"
      34             : 
      35             : class GpgME::SwdbResult::Private
      36             : {
      37             : public:
      38             :     Private() {}
      39           0 :     Private(gpgme_query_swdb_result_t result)
      40           0 :         : mResult(result ? new _gpgme_op_query_swdb_result (*result) : nullptr)
      41             :     {
      42           0 :         if (!result) {
      43           0 :             mResult->name = nullptr;
      44           0 :             return;
      45             :         }
      46           0 :         if (result->name) {
      47           0 :             mResult->name = strdup(result->name);
      48             :         }
      49           0 :         if (result->version) {
      50           0 :             mVersion = result->version;
      51             :         }
      52           0 :         if (result->iversion) {
      53           0 :             mIVersion = result->iversion;
      54             :         }
      55             :     }
      56             : 
      57             :     Private(const Private &other)
      58             :         : mResult(other.mResult)
      59             :     {
      60             :         if (mResult && mResult->name) {
      61             :             mResult->name = strdup(mResult->name);
      62             :         }
      63             :         mVersion = other.mVersion;
      64             :         mIVersion = other.mIVersion;
      65             :     }
      66             : 
      67           0 :     ~Private()
      68           0 :     {
      69           0 :         if (mResult) {
      70           0 :             std::free(mResult->name);
      71           0 :             delete mResult;
      72             :         }
      73           0 :     }
      74             : 
      75             :     GpgME::EngineInfo::Version mVersion;
      76             :     GpgME::EngineInfo::Version mIVersion;
      77             :     gpgme_query_swdb_result_t mResult;
      78             : };
      79             : 
      80           0 : GpgME::SwdbResult::SwdbResult(gpgme_query_swdb_result_t result)
      81           0 :     : d(new Private(result))
      82             : {
      83           0 : }
      84             : 
      85           0 : GpgME::SwdbResult::SwdbResult() : d()
      86             : {
      87           0 : }
      88             : 
      89           0 : bool GpgME::SwdbResult::isNull() const
      90             : {
      91           0 :     return !d || !d->mResult;
      92             : }
      93             : 
      94           0 : std::string GpgME::SwdbResult::name() const
      95             : {
      96           0 :     if (isNull() || !d->mResult->name) {
      97           0 :         return std::string();
      98             :     }
      99           0 :     return d->mResult->name;
     100             : }
     101             : 
     102           0 : GpgME::EngineInfo::Version GpgME::SwdbResult::version() const
     103             : {
     104           0 :     if (isNull()) {
     105           0 :         return GpgME::EngineInfo::Version();
     106             :     }
     107           0 :     return d->mVersion;
     108             : }
     109             : 
     110           0 : GpgME::EngineInfo::Version GpgME::SwdbResult::installedVersion() const
     111             : {
     112           0 :     if (isNull()) {
     113           0 :         return GpgME::EngineInfo::Version();
     114             :     }
     115           0 :     return d->mIVersion;
     116             : }
     117             : 
     118           0 : unsigned long GpgME::SwdbResult::created() const
     119             : {
     120           0 :     return isNull() ? 0 : d->mResult->created;
     121             : }
     122             : 
     123           0 : unsigned long GpgME::SwdbResult::retrieved() const
     124             : {
     125           0 :     return isNull() ? 0 : d->mResult->retrieved;
     126             : }
     127             : 
     128           0 : unsigned long GpgME::SwdbResult::releaseDate() const
     129             : {
     130           0 :     return isNull() ? 0 : d->mResult->reldate;
     131             : }
     132             : 
     133           0 : bool GpgME::SwdbResult::warning() const
     134             : {
     135           0 :     return isNull() ? 0 : d->mResult->warning;
     136             : }
     137             : 
     138           0 : bool GpgME::SwdbResult::update() const
     139             : {
     140           0 :     return isNull() ? 0 : d->mResult->update;
     141             : }
     142             : 
     143           0 : bool GpgME::SwdbResult::noinfo() const
     144             : {
     145           0 :     return isNull() ? 0 : d->mResult->noinfo;
     146             : }
     147             : 
     148           0 : bool GpgME::SwdbResult::unknown() const
     149             : {
     150           0 :     return isNull() ? 0 : d->mResult->unknown;
     151             : }
     152             : 
     153           0 : bool GpgME::SwdbResult::error() const
     154             : {
     155           0 :     return isNull() ? 0 : d->mResult->error;
     156             : }
     157             : 
     158           0 : bool GpgME::SwdbResult::tooOld() const
     159             : {
     160           0 :     return isNull() ? 0 : d->mResult->tooold;
     161             : }
     162             : 
     163           0 : bool GpgME::SwdbResult::urgent() const
     164             : {
     165           0 :     return isNull() ? 0 : d->mResult->urgent;
     166             : }
     167             : 
     168           0 : std::vector<GpgME::SwdbResult> GpgME::SwdbResult::query(const char *name,
     169             :                                                         const char *iversion,
     170             :                                                         Error *err)
     171             : {
     172           0 :   std::vector <GpgME::SwdbResult> ret;
     173             :   gpgme_ctx_t ctx;
     174           0 :   gpgme_error_t gpgerr = gpgme_new(&ctx);
     175             : 
     176           0 :   if (gpgerr) {
     177           0 :       if (err) {
     178           0 :         *err = Error (gpgerr);
     179             :       }
     180           0 :       return ret;
     181             :   }
     182             : 
     183           0 :   gpgerr = gpgme_set_protocol(ctx, GPGME_PROTOCOL_GPGCONF);
     184             : 
     185           0 :   if (gpgerr) {
     186           0 :       if (err) {
     187           0 :         *err = Error(gpgerr);
     188             :       }
     189           0 :       gpgme_release(ctx);
     190           0 :       return ret;
     191             :   }
     192             : 
     193           0 :   gpgerr = gpgme_op_query_swdb(ctx, name, iversion, 0);
     194             : 
     195           0 :   if (gpgerr) {
     196           0 :       if (err) {
     197           0 :         *err = Error(gpgerr);
     198             :       }
     199           0 :       gpgme_release(ctx);
     200           0 :       return ret;
     201             :   }
     202           0 :   gpgme_query_swdb_result_t result = gpgme_op_query_swdb_result(ctx);
     203           0 :   while (result) {
     204           0 :       ret.push_back(SwdbResult(result));
     205           0 :       result = result->next;
     206             :   }
     207             : 
     208           0 :   gpgme_release(ctx);
     209           0 :   return ret;
     210             : }
     211             : 
     212           0 : std::ostream &GpgME::operator<<(std::ostream &os, const GpgME::SwdbResult &result)
     213             : {
     214           0 :     os << "GpgME::SwdbResult(";
     215           0 :     if (!result.isNull()) {
     216           0 :         os << "\n name: "     << result.name()
     217           0 :            << "\n version: "  << result.version()
     218           0 :            << "\n installed: "<< result.installedVersion()
     219           0 :            << "\n created: "  << result.created()
     220           0 :            << "\n retrieved: "<< result.retrieved()
     221           0 :            << "\n warning: "  << result.warning()
     222           0 :            << "\n update: "   << result.update()
     223           0 :            << "\n urgent: "   << result.urgent()
     224           0 :            << "\n noinfo: "   << result.noinfo()
     225           0 :            << "\n unknown: "  << result.unknown()
     226           0 :            << "\n tooOld: "   << result.tooOld()
     227           0 :            << "\n error: "    << result.error()
     228           0 :            << "\n reldate: "  << result.releaseDate()
     229           0 :            << '\n';
     230             :     }
     231           0 :     return os << ")\n";
     232          24 : }

Generated by: LCOV version 1.13