mirror of
https://github.com/osmarks/ngircd.git
synced 2025-01-05 21:30:29 +00:00
Refactor Resolve_Read() into generic Proc_Read() function
This commit is contained in:
parent
7b5e2fe38e
commit
79be1c477e
@ -1952,7 +1952,7 @@ cb_Connect_to_Server(int fd, UNUSED short events)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Read result from pipe */
|
/* 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)
|
if (len == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2005,7 +2005,7 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Read result from pipe */
|
/* 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)
|
if (len == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -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- */
|
/* -eof- */
|
||||||
|
@ -32,6 +32,8 @@ GLOBAL void Proc_Kill PARAMS((PROC_STAT *proc));
|
|||||||
|
|
||||||
GLOBAL void Proc_GenericSignalHandler PARAMS((int Signal));
|
GLOBAL void Proc_GenericSignalHandler PARAMS((int Signal));
|
||||||
|
|
||||||
|
GLOBAL size_t Proc_Read PARAMS((PROC_STAT *proc, void *buffer, size_t buflen));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
@ -462,32 +462,4 @@ Do_ResolveName( const char *Host, int w_fd )
|
|||||||
} /* Do_ResolveName */
|
} /* 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- */
|
/* -eof- */
|
||||||
|
@ -18,7 +18,6 @@ GLOBAL bool Resolve_Addr PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
|
|||||||
int identsock, void (*cbfunc) (int, short)));
|
int identsock, void (*cbfunc) (int, short)));
|
||||||
GLOBAL bool Resolve_Name PARAMS((PROC_STAT * s, const char *Host,
|
GLOBAL bool Resolve_Name PARAMS((PROC_STAT * s, const char *Host,
|
||||||
void (*cbfunc) (int, short)));
|
void (*cbfunc) (int, short)));
|
||||||
GLOBAL size_t Resolve_Read PARAMS((PROC_STAT * s, void *buf, size_t buflen));
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user