Refactoring EXV_USE_CURL and EXV_USE_SSH

v0.27.3
clanmills 8 years ago
parent 1b3ea05155
commit d366943297

@ -2,46 +2,33 @@
#pragma once #pragma once
// Defined to 1 if when using `libssh' for SshIO. // Defined if you want to use libssh for SshIO.
#cmakedefine01 EXV_USE_SSH #cmakedefine EXV_USE_SSH
// Define to 1 if you want to use `libcurl' in httpIO. // Define to 1 if you want to use libcurl in httpIO.
#cmakedefine01 EXV_USE_CURL #cmakedefine EXV_USE_CURL
// Define if you require webready support. // Define if you require webready support.
#cmakedefine EXV_ENABLE_WEBREADY #cmakedefine EXV_ENABLE_WEBREADY
// Define to 1 if you have the `gmtime_r' function. // Define if you have the `gmtime_r' function.
#cmakedefine EXV_HAVE_GMTIME_R #cmakedefine EXV_HAVE_GMTIME_R
// Define to 1 if you have the <libintl.h> header file. // Define if you have the <libintl.h> header file.
#cmakedefine EXV_HAVE_LIBINTL_H #cmakedefine EXV_HAVE_LIBINTL_H
// Define to 1 if translation of program messages to the user's native language is requested. // Define if you want translation of program messages to the user's native language
#cmakedefine EXV_ENABLE_NLS #cmakedefine EXV_ENABLE_NLS
// Define to 1 if you require video support. // Define if you want video support.
#cmakedefine EXV_ENABLE_VIDEO #cmakedefine EXV_ENABLE_VIDEO
// Define if you have correct declaration of strerror_r().
#cmakedefine EXV_HAVE_DECL_STRERROR_R #cmakedefine EXV_HAVE_DECL_STRERROR_R
#ifndef EXV_COMMERCIAL_VERSION // Define to enable the Windows unicode path support.
// Definition to enable translation of Nikon lens names.
#cmakedefine EXV_HAVE_LENSDATA
// Define to 1 if you have the `iconv' function.
#cmakedefine EXV_HAVE_ICONV
// Definition to enable conversion of UCS2 encoded Windows tags to UTF-8.
#cmakedefine EXV_HAVE_PRINTUCS2
#endif /* !EXV_COMMERCIAL_VERSION */
// Definition to enable the Windows unicode path support.
#cmakedefine EXV_UNICODE_PATH #cmakedefine EXV_UNICODE_PATH
/* Define to `const' or to empty, depending on the second argument of `iconv'. */ /* Define to `const' or to empty, depending on the second argument of `iconv'. */
#cmakedefine ICONV_ACCEPTS_CONST_INPUT #cmakedefine ICONV_ACCEPTS_CONST_INPUT
#if defined ICONV_ACCEPTS_CONST_INPUT #if defined ICONV_ACCEPTS_CONST_INPUT
@ -50,22 +37,22 @@
#define EXV_ICONV_CONST #define EXV_ICONV_CONST
#endif #endif
// Definition to indicate if you have the <regex> header file. // Define if you have the <regex> header file.
#cmakedefine EXV_HAVE_REGEX #cmakedefine EXV_HAVE_REGEX
// Definition to indicate if you have the <regex.h> header file. // Define if you have the <regex.h> header file.
#cmakedefine EXV_HAVE_REGEX_H #cmakedefine EXV_HAVE_REGEX_H
// Definition to indicate you have the <memory.h> header file. // Define if have the <memory.h> header file.
#cmakedefine EXV_HAVE_MEMORY_H #cmakedefine EXV_HAVE_MEMORY_H
// Definition to indicate if you have the `memset' function. // Define if you have the memset function.
#cmakedefine EXV_HAVE_MEMSET #cmakedefine EXV_HAVE_MEMSET
// Definition to indicate if stdbool.h conforms to C99. // Define if stdbool.h conforms to C99.
#cmakedefine EXV_HAVE_STDBOOL_H #cmakedefine EXV_HAVE_STDBOOL_H
// Definition to indicate if you have the <stdint.h> header file. // Define if you have the <stdint.h> header file.
#cmakedefine EXV_HAVE_STDINT_H #cmakedefine EXV_HAVE_STDINT_H
#ifndef EXV_HAVE_STDINT_H #ifndef EXV_HAVE_STDINT_H
@ -74,53 +61,53 @@
#endif #endif
#endif #endif
// Definition to indicate if you have the <stdlib.h> header file. // Define if you have the <stdlib.h> header file.
#cmakedefine EXV_HAVE_STDLIB_H #cmakedefine EXV_HAVE_STDLIB_H
// Definition to indicate if you have the `strchr' function. // Define if you have the strchr function.
#cmakedefine EXV_HAVE_STRCHR #cmakedefine EXV_HAVE_STRCHR
// Definition to indicate if you have the `strerror' function. // Define if you have the strerror function.
#cmakedefine EXV_HAVE_STRERROR #cmakedefine EXV_HAVE_STRERROR
// Definition to indicate if you have the `strerror_r' function. // Define if you have the strerror_r function.
#cmakedefine EXV_HAVE_STRERROR_R #cmakedefine EXV_HAVE_STRERROR_R
// Definition to indicate if strerror_r returns char *. // Define if strerror_r returns char *.
#cmakedefine STRERROR_R_CHAR_P #cmakedefine STRERROR_R_CHAR_P
// Definition to indicate if you have the <strings.h> header file. // Define if you have the <strings.h> header file.
#cmakedefine EXV_HAVE_STRINGS_H #cmakedefine EXV_HAVE_STRINGS_H
// Definition to indicate if you have the `strtol' function. // Define if you have the strtol function.
#cmakedefine EXV_HAVE_STRTOL #cmakedefine EXV_HAVE_STRTOL
// Definition to indicate if you have the `mmap' function. // Define if you have the mmap function.
#cmakedefine EXV_HAVE_MMAP #cmakedefine EXV_HAVE_MMAP
// Definition to indicate if you have the `munmap' function. // Define if you have the munmap function.
#cmakedefine EXV_HAVE_MUNMAP #cmakedefine EXV_HAVE_MUNMAP
// Definition to indicate if you have the <sys/stat.h> header file. // Define if you have <sys/stat.h> header file.
#cmakedefine EXV_HAVE_SYS_STAT_H #cmakedefine EXV_HAVE_SYS_STAT_H
// Definition to indicate if you have the <sys/types.h> header file. // Define if you have the <sys/types.h> header file.
#cmakedefine EXV_HAVE_SYS_TYPES_H #cmakedefine EXV_HAVE_SYS_TYPES_H
// Definition to indicate if you have the `timegm' function. // Define if you have the timegm function.
#cmakedefine EXV_HAVE_TIMEGM #cmakedefine EXV_HAVE_TIMEGM
/* Define to 1 if you have the <unistd.h> header file. */ /* Define if you have the <unistd.h> header file. */
#cmakedefine EXV_HAVE_UNISTD_H 1 #cmakedefine EXV_HAVE_UNISTD_H 1
#if !defined( EXV_HAVE_UNISTD_H) && defined(__CYGWIN__) #if !defined( EXV_HAVE_UNISTD_H) && defined(__CYGWIN__)
#define EXV_HAVE_UNISTD_H 1 #define EXV_HAVE_UNISTD_H 1
#endif #endif
// Definition to indicate if you have the <sys/mman.h> header file. // Define if you have the <sys/mman.h> header file.
#cmakedefine EXV_HAVE_SYS_MMAN_H #cmakedefine EXV_HAVE_SYS_MMAN_H
// Definition to indicate if the `zlib' library will be used // Define if you have are using the zlib library.
#cmakedefine EXV_HAVE_LIBZ #cmakedefine EXV_HAVE_LIBZ
#if defined(_MSC_VER) && HAVE_LIBZ #if defined(_MSC_VER) && HAVE_LIBZ
@ -129,11 +116,11 @@
#endif #endif
#endif #endif
// Definition to indicate if you have the <process.h> header file. // Define if you have the <process.h> header file.
#cmakedefine EXV_HAVE_PROCESS_H #cmakedefine EXV_HAVE_PROCESS_H
/* Define to 1 if you have the Adobe XMP Toolkit. */ /* Define if you have (Exiv2/xmpsdk) Adobe XMP Toolkit. */
#cmakedefine EXV_HAVE_XMP_TOOLKIT 1 #cmakedefine EXV_HAVE_XMP_TOOLKIT
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing /* Define to 1 if `lstat' dereferences a symlink specified with a trailing
slash. */ slash. */
@ -168,3 +155,22 @@
/* Define to `unsigned' if <sys/types.h> does not define. */ /* Define to `unsigned' if <sys/types.h> does not define. */
#cmakedefine size_t #cmakedefine size_t
// ------------------------------------------------------------------
// The following features are not available for Commercial use
#ifndef EXV_COMMERCIAL_VERSION
// Definition to enable translation of Nikon lens names.
#cmakedefine EXV_HAVE_LENSDATA
// Define if you have the iconv function.
#cmakedefine EXV_HAVE_ICONV
// Definition to enable conversion of UCS2 encoded Windows tags to UTF-8.
#cmakedefine EXV_HAVE_PRINTUCS2
#endif /* !EXV_COMMERCIAL_VERSION */
// ------------------------------------------------------------------
// That's All Folks!
// ------------------------------------------------------------------

@ -43,12 +43,6 @@
#ifndef EXV_XPATH_MEMIO #ifndef EXV_XPATH_MEMIO
#define EXV_XPATH_MEMIO 0 #define EXV_XPATH_MEMIO 0
#endif #endif
#ifndef EXV_USE_CURL
#define EXV_USE_CURL 0
#endif
#ifndef EXV_USE_SSH
#define EXV_USE_SSH 0
#endif
// ***************************************************************************** // *****************************************************************************
// namespace extensions // namespace extensions
@ -1117,7 +1111,7 @@ namespace Exiv2 {
//@} //@}
}; };
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
/*! /*!
@brief Provides the http, https read/write access and ftp read access for the RemoteIo. @brief Provides the http, https read/write access and ftp read access for the RemoteIo.
This class is based on libcurl. This class is based on libcurl.
@ -1173,7 +1167,7 @@ namespace Exiv2 {
}; };
#endif #endif
#if EXV_USE_SSH == 1 #ifdef EXV_USE_SSH
/*! /*!
@brief Provides the ssh read/write access and sftp read access for the RemoteIo. @brief Provides the ssh read/write access and sftp read access for the RemoteIo.
This class is based on libssh. This class is based on libssh.
@ -1262,7 +1256,7 @@ namespace Exiv2 {
EXIV2API std::wstring ReplaceStringInPlace(std::wstring subject, const std::wstring& search, EXIV2API std::wstring ReplaceStringInPlace(std::wstring subject, const std::wstring& search,
const std::wstring& replace); const std::wstring& replace);
#endif #endif
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
/*! /*!
@brief The callback function is called by libcurl to write the data @brief The callback function is called by libcurl to write the data
*/ */

@ -53,17 +53,21 @@
#include "exiv2/mrwimage.hpp" #include "exiv2/mrwimage.hpp"
#include "exiv2/orfimage.hpp" #include "exiv2/orfimage.hpp"
#include "exiv2/pgfimage.hpp" #include "exiv2/pgfimage.hpp"
#ifdef EXV_HAVE_LIBZ #ifdef EXV_HAVE_LIBZ
#include "exiv2/pngimage.hpp" #include "exiv2/pngimage.hpp"
#endif #endif
#include "exiv2/preview.hpp" #include "exiv2/preview.hpp"
#include "exiv2/properties.hpp" #include "exiv2/properties.hpp"
#include "exiv2/psdimage.hpp" #include "exiv2/psdimage.hpp"
#include "exiv2/rafimage.hpp" #include "exiv2/rafimage.hpp"
#include "exiv2/rw2image.hpp" #include "exiv2/rw2image.hpp"
#if EXV_USE_SSH == 1
#ifdef EXV_USE_SSH
#include "exiv2/ssh.hpp" #include "exiv2/ssh.hpp"
#endif #endif
#include "exiv2/tags.hpp" #include "exiv2/tags.hpp"
#include "exiv2/tgaimage.hpp" #include "exiv2/tgaimage.hpp"
#include "exiv2/tiffimage.hpp" #include "exiv2/tiffimage.hpp"

@ -1,6 +1,7 @@
#ifndef HTTP_HPP_ #ifndef HTTP_HPP_
#define HTTP_HPP_ #define HTTP_HPP_
#include "config.h"
#include <string> #include <string>
#include <map> #include <map>
#include <algorithm> #include <algorithm>
@ -18,10 +19,7 @@ namespace Exiv2 {
EXIV2API int http(Exiv2::Dictionary& request,Exiv2::Dictionary& response,std::string& errors); EXIV2API int http(Exiv2::Dictionary& request,Exiv2::Dictionary& response,std::string& errors);
} }
#ifndef EXV_USE_CURL #ifdef EXV_USE_CURL
#define EXV_USE_CURL 0
#endif
#if EXV_USE_CURL == 1
#include <curl/curl.h> #include <curl/curl.h>
#endif #endif

@ -24,7 +24,7 @@
// included header files // included header files
#include "config.h" #include "config.h"
#if EXV_USE_SSH == 1 #ifdef EXV_USE_SSH
#include <libssh/libssh.h> #include <libssh/libssh.h>
#include <libssh/sftp.h> #include <libssh/sftp.h>
#include <sys/stat.h> #include <sys/stat.h>

@ -26,7 +26,7 @@ void httpcon(const std::string& url, bool useHttp1_0 = false) {
} }
} }
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
void curlcon(const std::string& url, bool useHttp1_0 = false) { void curlcon(const std::string& url, bool useHttp1_0 = false) {
CURL* curl = curl_easy_init(); CURL* curl = curl_easy_init();
if(!curl) { if(!curl) {
@ -68,7 +68,7 @@ void curlcon(const std::string& url, bool useHttp1_0 = false) {
} }
#endif #endif
#if EXV_USE_SSH == 1 #ifdef EXV_USE_SSH
void sshcon(const std::string& url) { void sshcon(const std::string& url) {
Exiv2::Uri uri = Exiv2::Uri::Parse(url); Exiv2::Uri uri = Exiv2::Uri::Parse(url);
Exiv2::Uri::Decode(uri); Exiv2::Uri::Decode(uri);
@ -125,7 +125,7 @@ int main(int argc,const char** argv)
bool isOk = false; bool isOk = false;
try { try {
#if EXV_USE_SSH == 1 #ifdef EXV_USE_SSH
if (prot == Exiv2::pSsh) { if (prot == Exiv2::pSsh) {
sshcon(url); sshcon(url);
isOk = true; isOk = true;
@ -134,7 +134,7 @@ int main(int argc,const char** argv)
isOk = true; isOk = true;
} }
#endif #endif
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
if (prot == Exiv2::pHttp || prot == Exiv2::pHttps || prot == Exiv2::pFtp) { if (prot == Exiv2::pHttp || prot == Exiv2::pHttps || prot == Exiv2::pFtp) {
curlcon(url, useHttp1_0); curlcon(url, useHttp1_0);
isOk = true; isOk = true;

@ -46,6 +46,7 @@ EXIV2_RCSID("@(#) $Id$")
#include <cstdlib> // for alloc, realloc, free #include <cstdlib> // for alloc, realloc, free
#include <sys/types.h> // for stat, chmod #include <sys/types.h> // for stat, chmod
#include <sys/stat.h> // for stat, chmod #include <sys/stat.h> // for stat, chmod
#ifdef EXV_HAVE_SYS_MMAN_H #ifdef EXV_HAVE_SYS_MMAN_H
# include <sys/mman.h> // for mmap and munmap # include <sys/mman.h> // for mmap and munmap
#endif #endif
@ -55,13 +56,15 @@ EXIV2_RCSID("@(#) $Id$")
#ifdef EXV_HAVE_UNISTD_H #ifdef EXV_HAVE_UNISTD_H
# include <unistd.h> // for getpid, stat # include <unistd.h> // for getpid, stat
#endif #endif
#if EXV_USE_CURL == 1
#include <curl/curl.h> #ifdef EXV_USE_CURL
# include <curl/curl.h>
#endif #endif
#if EXV_USE_SSH == 1
#include "ssh.hpp" #ifdef EXV_USE_SSH
# include "ssh.hpp"
#else #else
#define mode_t unsigned short # define mode_t unsigned short
#endif #endif
// Platform specific headers for handling extended attributes (xattr) // Platform specific headers for handling extended attributes (xattr)
@ -2079,7 +2082,7 @@ namespace Exiv2 {
} }
#endif #endif
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
//! Internal Pimpl structure of class RemoteIo. //! Internal Pimpl structure of class RemoteIo.
class CurlIo::CurlImpl : public Impl { class CurlIo::CurlImpl : public Impl {
public: public:
@ -2328,7 +2331,7 @@ namespace Exiv2 {
#endif #endif
#if EXV_USE_SSH == 1 #ifdef EXV_USE_SSH
//! Internal Pimpl structure of class RemoteIo. //! Internal Pimpl structure of class RemoteIo.
class SshIo::SshImpl : public Impl { class SshIo::SshImpl : public Impl {
public: public:
@ -2627,7 +2630,7 @@ namespace Exiv2 {
return subject; return subject;
} }
#endif #endif
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
size_t curlWriter(char* data, size_t size, size_t nmemb, size_t curlWriter(char* data, size_t size, size_t nmemb,
std::string* writerData) std::string* writerData)
{ {

@ -798,16 +798,19 @@ namespace Exiv2 {
BasicIo::AutoPtr ImageFactory::createIo(const std::string& path, bool useCurl) BasicIo::AutoPtr ImageFactory::createIo(const std::string& path, bool useCurl)
{ {
Protocol fProt = fileProtocol(path); Protocol fProt = fileProtocol(path);
#if EXV_USE_SSH == 1
#ifdef EXV_USE_SSH
if (fProt == pSsh || fProt == pSftp) { if (fProt == pSsh || fProt == pSftp) {
return BasicIo::AutoPtr(new SshIo(path)); // may throw return BasicIo::AutoPtr(new SshIo(path)); // may throw
} }
#endif #endif
#if EXV_USE_CURL == 1
#ifdef EXV_USE_CURL
if (useCurl && (fProt == pHttp || fProt == pHttps || fProt == pFtp)) { if (useCurl && (fProt == pHttp || fProt == pHttps || fProt == pFtp)) {
return BasicIo::AutoPtr(new CurlIo(path)); // may throw return BasicIo::AutoPtr(new CurlIo(path)); // may throw
} }
#endif #endif
if (fProt == pHttp) if (fProt == pHttp)
return BasicIo::AutoPtr(new HttpIo(path)); // may throw return BasicIo::AutoPtr(new HttpIo(path)); // may throw
if (fProt == pFileUri) if (fProt == pFileUri)

@ -32,7 +32,8 @@ EXIV2_RCSID("@(#) $Id: rw2image.cpp 3201 2013-12-01 12:13:42Z ahuggel $")
// included header files // included header files
#include "config.h" #include "config.h"
#include "ssh.hpp" #include "ssh.hpp"
#if EXV_USE_SSH == 1
#ifdef EXV_USE_SSH
// class member definitions // class member definitions
namespace Exiv2 { namespace Exiv2 {

@ -31,15 +31,7 @@ EXIV2_RCSID("@(#) $Id$")
#include "config.h" #include "config.h"
#ifndef EXV_USE_SSH #ifdef EXV_USE_CURL
#define EXV_USE_SSH 0
#endif
#ifndef EXV_USE_CURL
#define EXV_USE_CURL 0
#endif
#if EXV_USE_CURL == 1
#include <curl/curl.h> #include <curl/curl.h>
#endif #endif
@ -53,32 +45,12 @@ EXIV2_RCSID("@(#) $Id$")
# endif # endif
#endif #endif
#ifndef EXV_HAVE_XMP_TOOLKIT
#define EXV_HAVE_XMP_TOOLKIT 0
#endif
#ifndef EXV_HAVE_STRINGS
#define EXV_HAVE_STRINGS 0
#endif
#ifndef EXV_SYS_TYPES
#define EXV_SYS_TYPES 0
#endif
#ifndef EXV_HAVE_UNISTD
#define EXV_HAVE_UNISTD 0
#endif
#ifndef EXV_UNICODE_PATH
#define EXV_UNICODE_PATH 0
#endif
#include "http.hpp" #include "http.hpp"
#include "version.hpp" #include "version.hpp"
#include "makernote_int.hpp" #include "makernote_int.hpp"
// Adobe XMP Toolkit // Adobe XMP Toolkit
#if EXV_HAVE_XMP_TOOLKIT #ifdef EXV_HAVE_XMP_TOOLKIT
#include "xmp_exiv2.hpp" #include "xmp_exiv2.hpp"
#endif #endif
@ -319,6 +291,8 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
int enable_video =0; int enable_video =0;
int enable_webready =0; int enable_webready =0;
int use_curl =0;
int use_ssh =0;
#ifdef EXV_HAVE_GMTIME_R #ifdef EXV_HAVE_GMTIME_R
have_gmtime_r=1; have_gmtime_r=1;
@ -460,6 +434,14 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
enable_webready=1; enable_webready=1;
#endif #endif
#ifdef EXV_USE_CURL
use_curl=1;
#endif
#ifdef EXV_USE_SSH
use_ssh=1;
#endif
#if defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW__) #if defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW__)
// enumerate loaded libraries and determine path to executable // enumerate loaded libraries and determine path to executable
HMODULE handles[200]; HMODULE handles[200];
@ -516,8 +498,8 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
output(os,keys,"version" , __VERSION__); output(os,keys,"version" , __VERSION__);
output(os,keys,"date" , __DATE__ ); output(os,keys,"date" , __DATE__ );
output(os,keys,"time" , __TIME__ ); output(os,keys,"time" , __TIME__ );
output(os,keys,"ssh" , EXV_USE_SSH);
#if EXV_USE_CURL == 1 #ifdef EXV_USE_CURL
std::string curl_protocols; std::string curl_protocols;
curl_version_info_data* vinfo = curl_version_info(CURLVERSION_NOW); curl_version_info_data* vinfo = curl_version_info(CURLVERSION_NOW);
for (int i = 0; vinfo->protocols[i]; i++) { for (int i = 0; vinfo->protocols[i]; i++) {
@ -525,9 +507,9 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
curl_protocols += " " ; curl_protocols += " " ;
} }
output(os,keys,"curlprotocols" ,curl_protocols); output(os,keys,"curlprotocols" ,curl_protocols);
#else
output(os,keys,"curl" , EXV_USE_CURL);
#endif #endif
output(os,keys,"curl" , use_curl);
output(os,keys,"id" , "$Id$"); output(os,keys,"id" , "$Id$");
if ( libs.begin() != libs.end() ) { if ( libs.begin() != libs.end() ) {
output(os,keys,"executable" ,*libs.begin()); output(os,keys,"executable" ,*libs.begin());
@ -570,6 +552,9 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
output(os,keys,"have_unicode_path" ,have_unicode_path); output(os,keys,"have_unicode_path" ,have_unicode_path);
output(os,keys,"enable_video" ,enable_video ); output(os,keys,"enable_video" ,enable_video );
output(os,keys,"enable_webready" ,enable_webready ); output(os,keys,"enable_webready" ,enable_webready );
output(os,keys,"use_curl" ,use_curl );
output(os,keys,"use_ssh" ,use_ssh );
output(os,keys,"config_path" ,Exiv2::Internal::getExiv2ConfigPath()); output(os,keys,"config_path" ,Exiv2::Internal::getExiv2ConfigPath());
// #1147 // #1147
@ -579,7 +564,7 @@ void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
uid_t gid = getgid() ; output(os,keys,"gid" , gid ); uid_t gid = getgid() ; output(os,keys,"gid" , gid );
#endif #endif
#if EXV_HAVE_XMP_TOOLKIT #ifdef EXV_HAVE_XMP_TOOLKIT
const char* name = "xmlns"; const char* name = "xmlns";
Exiv2::Dictionary ns; Exiv2::Dictionary ns;

Loading…
Cancel
Save