Mercurial > mxe-octave
view src/exiv2-r2796.patch @ 4222:44b1a9b2193e
qt5: add initial qt5 to mxe-octave, based on mxe.cc
* src/qt5.mk: new file
* src/qtbase-1-fixes.patch: new file
* src/qtbase.mk: new file
* src/qtimageformats-1.patch: new file
* src/qtimageformats.mk: new file
* src/qtsvg.mk: new file
* src/qttools-1.patch: new file
* added src/qttools.mk: new file
* changed Makefile.in: added ENABLE_QT5 option
* configure.ac: added enable-qt5 option
* index.html: added new files to packages
* installer-files/octave-firsttime.vbs: added setup of qt5 bin, plugin path
* installer-files/octave.vbs: added setup of qt5 bin, plugin path
* installer-files/octave.bat: added setup of qt5 bin path
* src/default-octave.mk: added settig fot qt5 usage
* src/qscintilla.mk: added qt5 path
author | John D |
---|---|
date | Thu, 29 Sep 2016 11:22:51 -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 {