diff options
author | LRN <lrn1986@gmail.com> | 2013-02-14 16:15:11 +0000 |
---|---|---|
committer | LRN <lrn1986@gmail.com> | 2013-02-14 16:15:11 +0000 |
commit | bb0344c616bfa067498fbfd455768847115fe96e (patch) | |
tree | 66998960c60c75469f4fdbc13c77bae7290a2888 | |
parent | a2d71d8b9fa77325d466e47499d3da18c6b17a1f (diff) | |
download | gnunet-bb0344c616bfa067498fbfd455768847115fe96e.tar.gz gnunet-bb0344c616bfa067498fbfd455768847115fe96e.zip |
Fix file close to work on pipe ends correctly
-rw-r--r-- | src/util/disk.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/util/disk.c b/src/util/disk.c index 01a3cc214..4b9e5fd65 100644 --- a/src/util/disk.c +++ b/src/util/disk.c | |||
@@ -1819,32 +1819,51 @@ GNUNET_DISK_file_open (const char *fn, enum GNUNET_DISK_OpenFlags flags, | |||
1819 | int | 1819 | int |
1820 | GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h) | 1820 | GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h) |
1821 | { | 1821 | { |
1822 | int ret; | ||
1822 | if (h == NULL) | 1823 | if (h == NULL) |
1823 | { | 1824 | { |
1824 | errno = EINVAL; | 1825 | errno = EINVAL; |
1825 | return GNUNET_SYSERR; | 1826 | return GNUNET_SYSERR; |
1826 | } | 1827 | } |
1827 | 1828 | ||
1829 | ret = GNUNET_OK; | ||
1830 | |||
1828 | #if MINGW | 1831 | #if MINGW |
1829 | if (!CloseHandle (h->h)) | 1832 | if (!CloseHandle (h->h)) |
1830 | { | 1833 | { |
1831 | SetErrnoFromWinError (GetLastError ()); | 1834 | SetErrnoFromWinError (GetLastError ()); |
1832 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); | 1835 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); |
1836 | ret = GNUNET_SYSERR; | ||
1837 | } | ||
1838 | if (h->oOverlapRead) | ||
1839 | { | ||
1840 | if (!CloseHandle (h->oOverlapRead->hEvent)) | ||
1841 | { | ||
1842 | SetErrnoFromWinError (GetLastError ()); | ||
1843 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); | ||
1844 | ret = GNUNET_SYSERR; | ||
1845 | } | ||
1833 | GNUNET_free (h->oOverlapRead); | 1846 | GNUNET_free (h->oOverlapRead); |
1847 | } | ||
1848 | if (h->oOverlapWrite) | ||
1849 | { | ||
1850 | if (!CloseHandle (h->oOverlapWrite->hEvent)) | ||
1851 | { | ||
1852 | SetErrnoFromWinError (GetLastError ()); | ||
1853 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); | ||
1854 | ret = GNUNET_SYSERR; | ||
1855 | } | ||
1834 | GNUNET_free (h->oOverlapWrite); | 1856 | GNUNET_free (h->oOverlapWrite); |
1835 | GNUNET_free (h); | ||
1836 | return GNUNET_SYSERR; | ||
1837 | } | 1857 | } |
1838 | #else | 1858 | #else |
1839 | if (close (h->fd) != 0) | 1859 | if (close (h->fd) != 0) |
1840 | { | 1860 | { |
1841 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); | 1861 | LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close"); |
1842 | GNUNET_free (h); | 1862 | ret = GNUNET_SYSERR; |
1843 | return GNUNET_SYSERR; | ||
1844 | } | 1863 | } |
1845 | #endif | 1864 | #endif |
1846 | GNUNET_free (h); | 1865 | GNUNET_free (h); |
1847 | return GNUNET_OK; | 1866 | return ret; |
1848 | } | 1867 | } |
1849 | 1868 | ||
1850 | 1869 | ||