LCOV - code coverage report
Current view: top level - lang/cpp/src - swdbresult.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 99 1.0 %
Date: 2016-12-01 18:45:36 Functions: 2 22 9.1 %

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

Generated by: LCOV version 1.11