From 88294023c196497cfa6737be262c8b0c09d2a3ce Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Wed, 18 Nov 2020 15:14:56 +0100 Subject: [PATCH] cpp: Use portable off_t size_t * configure.ac: Configure cpp data.h.in * lang/cpp/src/Makefile.am: Generate data.h * lang/cpp/src/data.cpp, lang/cpp/src/data.h: Use portable types. * lang/qt/src/Makefile.am: Include build dir. * lang/qt/tests/makefile.am: Include build dir. -- These kind of patches have been around for a while, IMO this should not create an ABI incompatbility for cases where it already works because the types should be the same so I think this is not an interface break. GnuPG-Bug-Id: T3996 --- configure.ac | 3 +- lang/cpp/src/Makefile.am | 8 +-- lang/cpp/src/data.cpp | 6 +- lang/cpp/src/data.h | 140 -------------------------------------- lang/qt/src/Makefile.am | 2 +- lang/qt/tests/Makefile.am | 2 +- 6 files changed, 11 insertions(+), 150 deletions(-) delete mode 100644 lang/cpp/src/data.h diff --git a/configure.ac b/configure.ac index 2c3917a9..d593b04c 100644 --- a/configure.ac +++ b/configure.ac @@ -902,7 +902,8 @@ AC_CONFIG_FILES(Makefile src/Makefile src/versioninfo.rc src/gpgme.pc src/gpgme-glib.pc - src/gpgme.h) + src/gpgme.h + lang/cpp/src/data.h) AC_CONFIG_FILES(src/gpgme-config, chmod +x src/gpgme-config) AC_CONFIG_FILES(lang/cpp/Makefile lang/cpp/src/Makefile) AC_CONFIG_FILES(lang/cpp/tests/Makefile) diff --git a/lang/cpp/src/Makefile.am b/lang/cpp/src/Makefile.am index 32e3045c..d97c714e 100644 --- a/lang/cpp/src/Makefile.am +++ b/lang/cpp/src/Makefile.am @@ -20,7 +20,7 @@ # 02111-1307, USA EXTRA_DIST = GpgmeppConfig.cmake.in.in GpgmeppConfigVersion.cmake.in \ - gpgmepp_version.h.in GpgmeppConfig-w32.cmake.in.in + gpgmepp_version.h.in data.h.in GpgmeppConfig-w32.cmake.in.in lib_LTLIBRARIES = libgpgmepp.la @@ -39,7 +39,7 @@ main_sources = \ vfsmountresult.cpp configuration.cpp tofuinfo.cpp swdbresult.cpp gpgmepp_headers = \ - configuration.h context.h data.h decryptionresult.h \ + configuration.h context.h decryptionresult.h \ defaultassuantransaction.h editinteractor.h encryptionresult.h \ engineinfo.h error.h eventloopinteractor.h exception.h global.h \ gpgadduserideditinteractor.h gpgagentgetinfoassuantransaction.h \ @@ -63,7 +63,7 @@ interface_headers= \ gpgmeppincludedir = $(includedir)/gpgme++ gpgmeppinclude_HEADERS = $(gpgmepp_headers) nobase_gpgmeppinclude_HEADERS = $(interface_headers) -nodist_gpgmeppinclude_HEADERS = gpgmepp_version.h +nodist_gpgmeppinclude_HEADERS = gpgmepp_version.h data.h libgpgmepp_la_SOURCES = $(main_sources) $(gpgmepp_headers) context_vanilla.cpp \ $(interface_headers) $(private_gpgmepp_headers) @@ -110,4 +110,4 @@ install-data-local: install-cmake-files uninstall-local: uninstall-cmake-files CLEANFILES = GpgmeppConfig.cmake GpgmeppConfigVersion.cmake \ - gpgmepp_version.h GpgmeppConfig.cmake.in + gpgmepp_version.h data.h GpgmeppConfig.cmake.in diff --git a/lang/cpp/src/data.cpp b/lang/cpp/src/data.cpp index 7a93cbc2..356bbed6 100644 --- a/lang/cpp/src/data.cpp +++ b/lang/cpp/src/data.cpp @@ -217,17 +217,17 @@ GpgME::Error GpgME::Data::setFileName(const char *name) return Error(gpgme_data_set_file_name(d->data, name)); } -ssize_t GpgME::Data::read(void *buffer, size_t length) +gpgme_ssize_t GpgME::Data::read(void *buffer, size_t length) { return gpgme_data_read(d->data, buffer, length); } -ssize_t GpgME::Data::write(const void *buffer, size_t length) +gpgme_ssize_t GpgME::Data::write(const void *buffer, size_t length) { return gpgme_data_write(d->data, buffer, length); } -off_t GpgME::Data::seek(off_t offset, int whence) +gpgme_off_t GpgME::Data::seek(gpgme_off_t offset, int whence) { return gpgme_data_seek(d->data, offset, whence); } diff --git a/lang/cpp/src/data.h b/lang/cpp/src/data.h deleted file mode 100644 index df8607e7..00000000 --- a/lang/cpp/src/data.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - data.h - wraps a gpgme data object - Copyright (C) 2003,2004 Klarälvdalens Datakonsult AB - - This file is part of GPGME++. - - GPGME++ is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - GPGME++ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with GPGME++; see the file COPYING.LIB. If not, write to the - Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef __GPGMEPP_DATA_H__ -#define __GPGMEPP_DATA_H__ - -#include "global.h" -#include "key.h" - -#include // for size_t, off_t -#include // FILE -#include -#include - -namespace GpgME -{ - -class DataProvider; -class Error; - -class GPGMEPP_EXPORT Data -{ - struct Null { - Null() {} - }; -public: - /* implicit */ Data(const Null &); - Data(); - explicit Data(gpgme_data_t data); - - // Memory-Based Data Buffers: - Data(const char *buffer, size_t size, bool copy = true); - explicit Data(const char *filename); - Data(const char *filename, off_t offset, size_t length); - Data(std::FILE *fp, off_t offset, size_t length); - // File-Based Data Buffers: - explicit Data(std::FILE *fp); - explicit Data(int fd); - // Callback-Based Data Buffers: - explicit Data(DataProvider *provider); - - static const Null null; - - const Data &operator=(Data other) - { - swap(other); - return *this; - } - - void swap(Data &other) - { - using std::swap; - swap(this->d, other.d); - } - - bool isNull() const; - - enum Encoding { - AutoEncoding, - BinaryEncoding, - Base64Encoding, - ArmorEncoding, - MimeEncoding, - UrlEncoding, - UrlEscEncoding, - Url0Encoding, - }; - Encoding encoding() const; - Error setEncoding(Encoding encoding); - - enum Type { - Invalid, - Unknown, - PGPSigned, - PGPOther, - PGPKey, - CMSSigned, - CMSEncrypted, - CMSOther, - X509Cert, - PKCS12, - PGPEncrypted, - PGPSignature, - }; - Type type() const; - - char *fileName() const; - Error setFileName(const char *name); - - ssize_t read(void *buffer, size_t length); - ssize_t write(const void *buffer, size_t length); - off_t seek(off_t offset, int whence); - - /* Convenience function to do a seek (0, SEEK_SET). */ - Error rewind(); - - /** Try to parse the data to a key object using the - * Protocol proto. Returns an empty list on error.*/ - std::vector toKeys(const Protocol proto = Protocol::OpenPGP) const; - - /** Return a copy of the data as std::string. Sets seek pos to 0 */ - std::string toString(); - - class Private; - Private *impl() - { - return d.get(); - } - const Private *impl() const - { - return d.get(); - } -private: - std::shared_ptr d; -}; - -} - -GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Data) - -#endif // __GPGMEPP_DATA_H__ diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am index 94e88f32..55161d0a 100644 --- a/lang/qt/src/Makefile.am +++ b/lang/qt/src/Makefile.am @@ -227,7 +227,7 @@ nodist_qgpgmeinclude_HEADERS = qgpgme_version.h libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers) -AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \ +AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \ @GPGME_QT_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \ -DBUILDING_QGPGME -Wsuggest-override \ -Wzero-as-null-pointer-constant diff --git a/lang/qt/tests/Makefile.am b/lang/qt/tests/Makefile.am index ace5082c..dc5f503d 100644 --- a/lang/qt/tests/Makefile.am +++ b/lang/qt/tests/Makefile.am @@ -39,7 +39,7 @@ LDADD = ../../cpp/src/libgpgmepp.la ../src/libqgpgme.la \ ../../../src/libgpgme.la @GPGME_QT_LIBS@ @GPG_ERROR_LIBS@ \ @GPGME_QTTEST_LIBS@ @LDADD_FOR_TESTS_KLUDGE@ -lstdc++ -AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \ +AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \ @GPG_ERROR_CFLAGS@ @GPGME_QT_CFLAGS@ @GPG_ERROR_CFLAGS@ \ @LIBASSUAN_CFLAGS@ @GPGME_QTTEST_CFLAGS@ -DBUILDING_QGPGME \ -I$(top_srcdir)/lang/qt/src \