Mercurial > mxe-octave
view src/exiv2-r2796.patch @ 4654:b9e4ebcad82f
disable doc extraction for optim package
Disable the rules for extracting doc strings because they don't work
when cross compiling. Our patches to the source files don't touch the
doc strings, so there is no need to update them anyway.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 10 Apr 2018 07:50:10 -0400 |
parents | 6111c939f1f3 |
children |
line wrap: on
line source
This file is part of MXE. See index.html for further information. This patch has been taken from: http://dev.exiv2.org/projects/exiv2/repository/revisions/2796 Index: trunk/src/basicio.cpp =================================================================== --- trunk/src/basicio.cpp (revision 2795) +++ trunk/src/basicio.cpp (revision 2796) @@ -61,6 +61,11 @@ # include <unistd.h> // for getpid, stat #endif +// Platform specific headers for handling extended attributes (xattr) +#if defined(__APPLE__) +# include <sys/xattr.h> +#endif + #if defined WIN32 && !defined __CYGWIN__ // Windows doesn't provide mode_t, nlink_t typedef unsigned short mode_t; @@ -131,6 +136,8 @@ int switchMode(OpMode opMode); //! stat wrapper for internal use int stat(StructStat& buf) const; + //! copy extended attributes (xattr) from another file + void copyXattrFrom(const FileIo& src); #if defined WIN32 && !defined __CYGWIN__ // Windows function to determine the number of hardlinks (on NTFS) DWORD winNumberOfLinks() const; @@ -252,6 +259,47 @@ return ret; } // FileIo::Impl::stat + void FileIo::Impl::copyXattrFrom(const FileIo& src) + { +#if defined(__APPLE__) +# if defined(EXV_UNICODE_PATH) +# error No xattr API for MacOS X with unicode support +# endif + const ssize_t namebufSize = ::listxattr(src.p_->path_.c_str(), 0, 0, 0); + if (namebufSize < 0) { + throw Error(2, src.p_->path_, strError(), "listxattr"); + } + if (namebufSize == 0) { + // No extended attributes in source file + return; + } + char namebuf[namebufSize]; + if (::listxattr(src.p_->path_.c_str(), namebuf, sizeof(namebuf), 0) != namebufSize) { + throw Error(2, src.p_->path_, strError(), "listxattr"); + } + for (ssize_t namebufPos = 0; namebufPos < namebufSize;) { + const char *name = namebuf + namebufPos; + namebufPos += strlen(name) + 1; + const ssize_t valueSize = ::getxattr(src.p_->path_.c_str(), name, 0, 0, 0, 0); + if (valueSize < 0) { + throw Error(2, src.p_->path_, strError(), "getxattr"); + } + char value[valueSize]; + if (::getxattr(src.p_->path_.c_str(), name, value, sizeof(value), 0, 0) != valueSize) { + throw Error(2, src.p_->path_, strError(), "getxattr"); + } +#ifdef DEBUG + EXV_DEBUG << "Copying xattr \"" << name << "\" with value size " << valueSize << "\n"; +#endif + if (::setxattr(path_.c_str(), name, value, valueSize, 0, 0) != 0) { + throw Error(2, path_, strError(), "setxattr"); + } + } +#else + // No xattr support for this platform. +#endif + } // FileIo::Impl::copyXattrFrom + #if defined WIN32 && !defined __CYGWIN__ DWORD FileIo::Impl::winNumberOfLinks() const { @@ -521,6 +569,7 @@ throw Error(10, path(), "w+b", strError()); } } + fileIo->p_->copyXattrFrom(*this); basicIo = fileIo; } else {