Refactor Resolve_Read() into generic Proc_Read() function

This commit is contained in:
Alexander Barton 2010-07-11 16:58:30 +02:00
parent 7b5e2fe38e
commit 79be1c477e
5 changed files with 31 additions and 31 deletions

View File

@ -1952,7 +1952,7 @@ cb_Connect_to_Server(int fd, UNUSED short events)
}
/* Read result from pipe */
len = Resolve_Read(&Conf_Server[i].res_stat, dest_addrs, sizeof(dest_addrs));
len = Proc_Read(&Conf_Server[i].res_stat, dest_addrs, sizeof(dest_addrs));
if (len == 0)
return;
@ -2005,7 +2005,7 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
}
/* Read result from pipe */
len = Resolve_Read(&My_Connections[i].proc_stat, readbuf, sizeof readbuf -1);
len = Proc_Read(&My_Connections[i].proc_stat, readbuf, sizeof readbuf -1);
if (len == 0)
return;

View File

@ -116,4 +116,31 @@ Proc_GenericSignalHandler(int Signal)
}
}
/**
* Read bytes from a pipe of a forked child process.
*/
GLOBAL size_t
Proc_Read(PROC_STAT *proc, void *buffer, size_t buflen)
{
ssize_t bytes_read = 0;
assert(buffer != NULL);
assert(buflen > 0);
bytes_read = read(proc->pipe_fd, buffer, buflen);
if (bytes_read < 0) {
if (errno == EAGAIN)
return 0;
Log(LOG_CRIT, "Can't read from child process %ld: %s",
proc->pid, strerror(errno));
bytes_read = 0;
}
#if DEBUG
else if (bytes_read == 0)
LogDebug("Can't read from child process %ld: EOF", proc->pid);
#endif
Proc_Kill(proc);
return (size_t)bytes_read;
}
/* -eof- */

View File

@ -32,6 +32,8 @@ GLOBAL void Proc_Kill PARAMS((PROC_STAT *proc));
GLOBAL void Proc_GenericSignalHandler PARAMS((int Signal));
GLOBAL size_t Proc_Read PARAMS((PROC_STAT *proc, void *buffer, size_t buflen));
#endif
/* -eof- */

View File

@ -462,32 +462,4 @@ Do_ResolveName( const char *Host, int w_fd )
} /* Do_ResolveName */
/**
* Read result of resolver sub-process from pipe
*/
GLOBAL size_t
Resolve_Read( PROC_STAT *s, void* readbuf, size_t buflen)
{
ssize_t bytes_read;
assert(buflen > 0);
/* Read result from pipe */
bytes_read = read(Proc_GetPipeFd(s), readbuf, buflen);
if (bytes_read < 0) {
if (errno == EAGAIN)
return 0;
Log( LOG_CRIT, "Resolver: Can't read result: %s!", strerror(errno));
bytes_read = 0;
}
#ifdef DEBUG
else if (bytes_read == 0)
Log( LOG_DEBUG, "Resolver: Can't read result: EOF");
#endif
Proc_Kill(s);
return (size_t)bytes_read;
}
/* -eof- */

View File

@ -18,7 +18,6 @@ GLOBAL bool Resolve_Addr PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
int identsock, void (*cbfunc) (int, short)));
GLOBAL bool Resolve_Name PARAMS((PROC_STAT * s, const char *Host,
void (*cbfunc) (int, short)));
GLOBAL size_t Resolve_Read PARAMS((PROC_STAT * s, void *buf, size_t buflen));
#endif