aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2013-02-14 16:15:11 +0000
committerLRN <lrn1986@gmail.com>2013-02-14 16:15:11 +0000
commitbb0344c616bfa067498fbfd455768847115fe96e (patch)
tree66998960c60c75469f4fdbc13c77bae7290a2888 /src/util
parenta2d71d8b9fa77325d466e47499d3da18c6b17a1f (diff)
downloadgnunet-bb0344c616bfa067498fbfd455768847115fe96e.tar.gz
gnunet-bb0344c616bfa067498fbfd455768847115fe96e.zip
Fix file close to work on pipe ends correctly
Diffstat (limited to 'src/util')
-rw-r--r--src/util/disk.c29
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,
1819int 1819int
1820GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h) 1820GNUNET_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