int include_sym_links;
} GetFileSizeData;
-struct GNUNET_DISK_PipeHandle
-{
- struct GNUNET_DISK_FileHandle fd[2];
-};
+
static int
getSizeRec (void *ptr, const char *fn)
/**
* Creates an interprocess channel
+ *
* @param blocking creates an asynchronous pipe if set to GNUNET_NO
* @return handle to the new pipe, NULL on error
*/
int fd[2];
int ret;
int flags;
+ int eno;
ret = pipe (fd);
if (ret != -1)
{
- p->fd[0].fd = fd[0];
- p->fd[1].fd = fd[1];
+ p->fd[0] = GNUNET_malloc(sizeof(struct GNUNET_DISK_FileHandle));
+ p->fd[1] = GNUNET_malloc(sizeof(struct GNUNET_DISK_FileHandle));
+ p->fd[0]->fd = fd[0];
+ p->fd[1]->fd = fd[1];
if (!blocking)
{
}
if (ret == -1)
{
+ eno = errno;
GNUNET_log_strerror(GNUNET_ERROR_TYPE_ERROR, "fcntl");
- close (fd[0]);
- close (fd[1]);
+ GNUNET_DISK_file_close (p->fd[0]);
+ GNUNET_DISK_file_close (p->fd[1]);
+ p->fd[0] = NULL;
+ p->fd[1] = NULL;
err = GNUNET_YES;
+ errno = eno;
}
}
}
DWORD mode;
mode = PIPE_NOWAIT;
- SetNamedPipeHandleState (p->fd[0].h, &mode, NULL, NULL);
- SetNamedPipeHandleState (p->fd[1].h, &mode, NULL, NULL);
+ p->fd[0] = GNUNET_malloc(sizeof(struct GNUNET_DISK_FileHandle));
+ p->fd[1] = GNUNET_malloc(sizeof(struct GNUNET_DISK_FileHandle));
+ SetNamedPipeHandleState (p->fd[0]->h, &mode, NULL, NULL);
+ SetNamedPipeHandleState (p->fd[1]->h, &mode, NULL, NULL);
/* this always fails on Windows 95, so we don't care about error handling */
}
}
{
int ret = GNUNET_OK;
#ifdef MINGW
- if (!CloseHandle (p->fd[0].h))
+ if (!CloseHandle (p->fd[0]->h))
{
SetErrnoFromWinError (GetLastError ());
ret = GNUNET_SYSERR;
}
- if (!CloseHandle (p->fd[1].h))
+ if (!CloseHandle (p->fd[1]->h))
{
SetErrnoFromWinError (GetLastError ());
ret = GNUNET_SYSERR;
#else
int save;
- if (0 != close (p->fd[0].fd))
+ if (0 != close (p->fd[0]->fd))
{
ret = GNUNET_SYSERR;
save = errno;
else
save = 0;
- if (0 != close (p->fd[1].fd))
+ if (0 != close (p->fd[1]->fd))
ret = GNUNET_SYSERR;
else
errno = save;
#endif
+ GNUNET_free (p->fd[0]);
+ GNUNET_free (p->fd[1]);
GNUNET_free (p);
return ret;
}
const struct GNUNET_DISK_FileHandle *
GNUNET_DISK_pipe_handle (const struct GNUNET_DISK_PipeHandle *p, int n)
{
- return &p->fd[n];
+ return p->fd[n];
}
/**