Bug #1043 » T1043.patch
| include/exiv2/basicio.hpp (working copy) | ||
|---|---|---|
| 258 | 258 | @note This method should be only called after the concerned data (metadata) | 
| 259 | 259 | are all downloaded from the remote file to memory. | 
| 260 | 260 | */ | 
| 261 |     	virtual void populateFakeData() {} | |
| 261 |         virtual void populateFakeData() {} | |
| 262 | 262 | //@} | 
| 263 | 263 | |
| 264 | 264 | protected: | 
| ... | ... | |
| 684 | 684 | #else | 
| 685 | 685 | virtual int seek(long offset, Position pos); | 
| 686 | 686 | #endif | 
| 687 | 		/*! | |
| 687 |         /*! | |
| 688 | 688 | @brief Allow direct access to the underlying data buffer. The buffer | 
| 689 | 689 | is not protected against write access in any way, the argument | 
| 690 | 690 | is ignored. | 
| ... | ... | |
| 694 | 694 | */ | 
| 695 | 695 | virtual byte* mmap(bool /*isWriteable*/ =false); | 
| 696 | 696 | virtual int munmap(); | 
| 697 |         virtual int msync(); | |
| 697 | int msync(); | |
| 698 | 698 | //@} | 
| 699 | 699 | |
| 700 | 700 | //! @name Accessors | 
| ... | ... | |
| 1272 | 1272 | */ | 
| 1273 | 1273 | EXIV2API long writeFile(const DataBuf& buf, const std::wstring& wpath); | 
| 1274 | 1274 | #endif | 
| 1275 | 	/*! | |
| 1275 |     /*! | |
| 1276 | 1276 | @brief replace each substring of the subject that matches the given search string with the given replacement. | 
| 1277 | 1277 | @return the subject after replacing. | 
| 1278 | 1278 | */ | 
| 1279 | 1279 | EXIV2API std::string ReplaceStringInPlace(std::string subject, const std::string& search, | 
| 1280 | 1280 | const std::string& replace); | 
| 1281 | 1281 | #ifdef EXV_UNICODE_PATH | 
| 1282 | 	/*! | |
| 1282 |     /*! | |
| 1283 | 1283 | @brief Like ReplaceStringInPlace() but accepts a unicode path in an std::wstring. | 
| 1284 | 1284 | @return the subject after replacing. | 
| 1285 | 1285 | @note This function is only available on Windows. | 
| src/basicio.cpp (working copy) | ||
|---|---|---|
| 125 | 125 |         struct StructStat { | 
| 126 | 126 |             StructStat() : st_mode(0), st_size(0), st_nlink(0) {} | 
| 127 | 127 | mode_t st_mode; //!< Permissions | 
| 128 | 			off_t   st_size;            //!< Size | |
| 128 |             off_t   st_size;            //!< Size | |
| 129 | 129 | nlink_t st_nlink; //!< Number of hard links (broken on Windows, see winNumberOfLinks()) | 
| 130 | 130 | }; | 
| 131 | 131 | // #endif | 
| ... | ... | |
| 256 | 256 |             if (0 == ret) { | 
| 257 | 257 | buf.st_size = st.st_size; | 
| 258 | 258 | buf.st_nlink = st.st_nlink; | 
| 259 | 				buf.st_mode = st.st_mode; | |
| 259 |                 buf.st_mode = st.st_mode; | |
| 260 | 260 | } | 
| 261 | 261 | } | 
| 262 | 262 | return ret; | 
| ... | ... | |
| 681 | 681 | close(); | 
| 682 | 682 | |
| 683 | 683 | bool statOk = true; | 
| 684 | 			mode_t origStMode = 0; | |
| 685 | 			std::string spf; | |
| 684 |             mode_t origStMode = 0; | |
| 685 |             std::string spf; | |
| 686 | 686 | char* pf = 0; | 
| 687 | 687 | #ifdef EXV_UNICODE_PATH | 
| 688 | 688 | std::wstring wspf; | 
| ... | ... | |
| 735 | 735 |             if (p_->stat(buf1) == -1) { | 
| 736 | 736 | statOk = false; | 
| 737 | 737 | } | 
| 738 | 			origStMode = buf1.st_mode; | |
| 738 |             origStMode = buf1.st_mode; | |
| 739 | 739 | #endif // !EXV_HAVE_LSTAT | 
| 740 | 740 | |
| 741 | 741 | // MSVCRT rename that does not overwrite existing files | 
| ... | ... | |
| 859 | 859 | EXV_WARNING << Error(2, pf, strError(), "::stat") << "\n"; | 
| 860 | 860 | #endif | 
| 861 | 861 | } | 
| 862 | 				if (statOk && origStMode != buf2.st_mode) { | |
| 862 |                 if (statOk && origStMode != buf2.st_mode) { | |
| 863 | 863 | // Set original file permissions | 
| 864 | 864 |                     if (::chmod(pf, origStMode) == -1) { | 
| 865 | 865 | #ifndef SUPPRESS_WARNINGS | 
| ... | ... | |
| 867 | 867 | #endif | 
| 868 | 868 | } | 
| 869 | 869 | } | 
| 870 | 			} | |
| 870 |             } | |
| 871 | 871 | } // if (fileIo) | 
| 872 | 872 |         else { | 
| 873 | 873 | // Generic handling, reopen both to reset to start | 
| ... | ... | |
| 1199 | 1199 | MemIo *memIo = dynamic_cast<MemIo*>(&src); | 
| 1200 | 1200 |         if (memIo) { | 
| 1201 | 1201 | // Optimization if src is another instance of MemIo | 
| 1202 |             if (true == p_->isMalloced_) { | |
| 1202 |             if (p_->isMalloced_) { | |
| 1203 | msync(); | |
| 1203 | 1204 | std::free(p_->data_); | 
| 1204 | 1205 | } | 
| 1205 | 1206 | p_->idx_ = 0; | 
| ... | ... | |
| 1287 | 1288 | |
| 1288 | 1289 | int MemIo::munmap() | 
| 1289 | 1290 |     { | 
| 1290 | msync(); | |
| 1291 | return 0; | |
| 1291 | return msync(); | |
| 1292 | 1292 | } | 
| 1293 | 1293 | |
| 1294 | 1294 | int MemIo::msync() | 
| 1295 | 1295 |     { | 
| 1296 | 1296 | #ifdef MS_SYNC | 
| 1297 |     	return ::msync(p_, p_->size_, MS_SYNC); | |
| 1297 |         return ::msync(p_, p_->size_, MS_SYNC); | |
| 1298 | 1298 | #else | 
| 1299 | 		return 0; | |
| 1299 |         return 0; | |
| 1300 | 1300 | #endif | 
| 1301 | 1301 | } | 
| 1302 | 1302 | |