|  | 
| 50 | 50 | #define M_PI 3.14159265358979323846 | 
| 51 | 51 | #endif | 
| 52 | 52 | 
 | 
| 53 |  | -#include <unistd.h> // TODO: Windows | 
|  | 53 | +#if !defined(_WIN32) && !defined(_WIN64) | 
|  | 54 | +#include <unistd.h> | 
|  | 55 | +#else | 
|  | 56 | +#include <fcntl.h> | 
|  | 57 | +#include <io.h> | 
|  | 58 | +#endif | 
|  | 59 | + | 
| 54 | 60 | 
 | 
| 55 | 61 | Fraction::Fraction(int32_t num, int32_t den) | 
| 56 | 62 | { | 
| @@ -155,7 +161,7 @@ bool Fraction::is_valid() const | 
| 155 | 161 |   return denominator != 0; | 
| 156 | 162 | } | 
| 157 | 163 | 
 | 
| 158 |  | -uint32_t from_fourcc(const char* string) | 
|  | 164 | +static uint32_t from_fourcc(const char* string) | 
| 159 | 165 | { | 
| 160 | 166 |   return ((string[0] << 24) | | 
| 161 | 167 |           (string[1] << 16) | | 
| @@ -1035,7 +1041,7 @@ Error Box_ftyp::parse(BitstreamRange& range) | 
| 1035 | 1041 |   m_major_brand = range.read32(); | 
| 1036 | 1042 |   m_minor_version = range.read32(); | 
| 1037 | 1043 | 
 | 
| 1038 |  | -  if (get_box_size() <= get_header_size() + 8) { | 
|  | 1044 | +  if (get_box_size() - 8 <= get_header_size()) { | 
| 1039 | 1045 |     // Sanity check. | 
| 1040 | 1046 |     return Error(heif_error_Invalid_input, | 
| 1041 | 1047 |                  heif_suberror_Invalid_box_size, | 
| @@ -1406,8 +1412,15 @@ void Box_iloc::set_use_tmp_file(bool flag) | 
| 1406 | 1412 | { | 
| 1407 | 1413 |   m_use_tmpfile = flag; | 
| 1408 | 1414 |   if (flag) { | 
|  | 1415 | +#if !defined(_WIN32) && !defined(_WIN64) | 
| 1409 | 1416 |     strcpy(m_tmp_filename, "/tmp/libheif-XXXXXX"); | 
| 1410 | 1417 |     m_tmpfile_fd = mkstemp(m_tmp_filename); | 
|  | 1418 | +#else | 
|  | 1419 | +    char tmpname[L_tmpnam_s]; | 
|  | 1420 | +    // TODO: check return value (errno_t) | 
|  | 1421 | +    tmpnam_s(tmpname, L_tmpnam_s); | 
|  | 1422 | +    _sopen_s(&m_tmpfile_fd, tmpname, _O_CREAT | _O_TEMPORARY | _O_TRUNC | _O_RDWR, _SH_DENYRW, _S_IREAD | _S_IWRITE); | 
|  | 1423 | +#endif | 
| 1411 | 1424 |   } | 
| 1412 | 1425 | } | 
| 1413 | 1426 | 
 | 
| @@ -1629,7 +1642,11 @@ Error Box_iloc::append_data(heif_item_id item_ID, | 
| 1629 | 1642 |   extent.length = data.size(); | 
| 1630 | 1643 | 
 | 
| 1631 | 1644 |   if (m_use_tmpfile && construction_method==0) { | 
|  | 1645 | +#if !defined(_WIN32) && !defined(_WIN64) | 
| 1632 | 1646 |     ssize_t cnt = ::write(m_tmpfile_fd, data.data(), data.size()); | 
|  | 1647 | +#else | 
|  | 1648 | +    int cnt = _write(m_tmpfile_fd, data.data(), data.size()); | 
|  | 1649 | +#endif | 
| 1633 | 1650 |     if (cnt < 0) { | 
| 1634 | 1651 |       std::stringstream sstr; | 
| 1635 | 1652 |       sstr << "Could not write to tmp file: error " << errno; | 
| @@ -1883,7 +1900,11 @@ Error Box_iloc::write_mdat_after_iloc(StreamWriter& writer) | 
| 1883 | 1900 | 
 | 
| 1884 | 1901 |         if (m_use_tmpfile) { | 
| 1885 | 1902 |           std::vector<uint8_t> data(extent.length); | 
|  | 1903 | +#if !defined(_WIN32) && !defined(_WIN64) | 
| 1886 | 1904 |           ssize_t cnt = ::read(m_tmpfile_fd, data.data(), extent.length); | 
|  | 1905 | +#else | 
|  | 1906 | +          int cnt = _read(m_tmpfile_fd, data.data(), extent.length); | 
|  | 1907 | +#endif | 
| 1887 | 1908 |           if (cnt<0) { | 
| 1888 | 1909 |             std::stringstream sstr; | 
| 1889 | 1910 |             sstr << "Cannot read tmp data file, error " << errno; | 
| @@ -2632,7 +2653,7 @@ Error Box_ipma::parse(BitstreamRange& range) | 
| 2632 | 2653 | 
 | 
| 2633 | 2654 |     int assoc_cnt = range.read8(); | 
| 2634 | 2655 |     for (int k = 0; k < assoc_cnt; k++) { | 
| 2635 |  | -      PropertyAssociation association; | 
|  | 2656 | +      PropertyAssociation association{}; | 
| 2636 | 2657 | 
 | 
| 2637 | 2658 |       uint16_t index; | 
| 2638 | 2659 |       if (get_flags() & 1) { | 
| @@ -3902,9 +3923,9 @@ Error Box_cmin::write(StreamWriter& writer) const | 
| 3902 | 3923 | } | 
| 3903 | 3924 | 
 | 
| 3904 | 3925 | 
 | 
| 3905 |  | -std::array<double,9> mul(const std::array<double,9>& a, const std::array<double,9>& b) | 
|  | 3926 | +static std::array<double,9> mul(const std::array<double,9>& a, const std::array<double,9>& b) | 
| 3906 | 3927 | { | 
| 3907 |  | -  std::array<double,9> m; | 
|  | 3928 | +  std::array<double, 9> m{}; | 
| 3908 | 3929 | 
 | 
| 3909 | 3930 |   m[0] = a[0]*b[0] + a[1]*b[3] + a[2]*b[6]; | 
| 3910 | 3931 |   m[1] = a[0]*b[1] + a[1]*b[4] + a[2]*b[7]; | 
|  | 
0 commit comments