зеркало из https://github.com/microsoft/git.git
connect.c: finish_connect(): allow null pid parameter
git_connect() can return 0 if we use git protocol for example. Users of this function don't know and don't care if a process had been created or not, and to avoid them to check it before calling finish_connect() this patch allows finish_connect() to take a null pid. And in that case return 0. [jc: updated function signature of git_connect() with a comment on its return value. ] Signed-off-by: Franck Bui-Huu <vagabon.xyz@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
0f503d77ac
Коммит
f42a5c4eb0
2
cache.h
2
cache.h
|
@ -359,7 +359,7 @@ struct ref {
|
|||
#define REF_HEADS (1u << 1)
|
||||
#define REF_TAGS (1u << 2)
|
||||
|
||||
extern int git_connect(int fd[2], char *url, const char *prog);
|
||||
extern pid_t git_connect(int fd[2], char *url, const char *prog);
|
||||
extern int finish_connect(pid_t pid);
|
||||
extern int path_match(const char *path, int nr, char **match);
|
||||
extern int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
|
||||
|
|
13
connect.c
13
connect.c
|
@ -602,9 +602,15 @@ static void git_proxy_connect(int fd[2], char *host)
|
|||
#define MAX_CMD_LEN 1024
|
||||
|
||||
/*
|
||||
* Yeah, yeah, fixme. Need to pass in the heads etc.
|
||||
* This returns 0 if the transport protocol does not need fork(2),
|
||||
* or a process id if it does. Once done, finish the connection
|
||||
* with finish_connect() with the value returned from this function
|
||||
* (it is safe to call finish_connect() with 0 to support the former
|
||||
* case).
|
||||
*
|
||||
* Does not return a negative value on error; it just dies.
|
||||
*/
|
||||
int git_connect(int fd[2], char *url, const char *prog)
|
||||
pid_t git_connect(int fd[2], char *url, const char *prog)
|
||||
{
|
||||
char *host, *path = url;
|
||||
char *end;
|
||||
|
@ -748,6 +754,9 @@ int git_connect(int fd[2], char *url, const char *prog)
|
|||
|
||||
int finish_connect(pid_t pid)
|
||||
{
|
||||
if (pid == 0)
|
||||
return 0;
|
||||
|
||||
while (waitpid(pid, NULL, 0) < 0) {
|
||||
if (errno != EINTR)
|
||||
return -1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче