Mercurial > public > mercurial-scm > hg
diff contrib/hgsh/hgsh.c @ 10282:08a0f04b56bd
many, many trivial check-code fixups
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 25 Jan 2010 00:05:27 -0600 |
parents | ea7b982b6c08 |
children | 613b8bd2284e |
line wrap: on
line diff
--- a/contrib/hgsh/hgsh.c Mon Jan 25 00:05:22 2010 -0600 +++ b/contrib/hgsh/hgsh.c Mon Jan 25 00:05:27 2010 -0600 @@ -89,7 +89,7 @@ */ #ifndef HG_SHELL #define HG_SHELL NULL -// #define HG_SHELL "/bin/bash" +/* #define HG_SHELL "/bin/bash" */ #endif /* @@ -118,40 +118,40 @@ static void print_cmdline(int argc, char **argv) { - FILE *fp = stderr; - int i; + FILE *fp = stderr; + int i; - fputs("command: ", fp); + fputs("command: ", fp); - for (i = 0; i < argc; i++) { - char *spc = strpbrk(argv[i], " \t\r\n"); - if (spc) { - fputc('\'', fp); - } - fputs(argv[i], fp); - if (spc) { - fputc('\'', fp); - } - if (i < argc - 1) { - fputc(' ', fp); - } - } - fputc('\n', fp); - fflush(fp); + for (i = 0; i < argc; i++) { + char *spc = strpbrk(argv[i], " \t\r\n"); + if (spc) { + fputc('\'', fp); + } + fputs(argv[i], fp); + if (spc) { + fputc('\'', fp); + } + if (i < argc - 1) { + fputc(' ', fp); + } + } + fputc('\n', fp); + fflush(fp); } static void usage(const char *reason, int exitcode) { - char *hg_help = HG_HELP; + char *hg_help = HG_HELP; - if (reason) { - fprintf(stderr, "*** Error: %s.\n", reason); - } - fprintf(stderr, "*** This program has been invoked incorrectly.\n"); - if (hg_help) { - fprintf(stderr, "*** %s\n", hg_help); - } - exit(exitcode ? exitcode : EX_USAGE); + if (reason) { + fprintf(stderr, "*** Error: %s.\n", reason); + } + fprintf(stderr, "*** This program has been invoked incorrectly.\n"); + if (hg_help) { + fprintf(stderr, "*** %s\n", hg_help); + } + exit(exitcode ? exitcode : EX_USAGE); } /* @@ -162,43 +162,43 @@ */ static void forward_through_gateway(int argc, char **argv) { - char *ssh = SSH; - char *hg_host = HG_HOST; - char *hg_user = HG_USER; - char **nargv = alloca((10 + argc) * sizeof(char *)); - int i = 0, j; + char *ssh = SSH; + char *hg_host = HG_HOST; + char *hg_user = HG_USER; + char **nargv = alloca((10 + argc) * sizeof(char *)); + int i = 0, j; - nargv[i++] = ssh; - nargv[i++] = "-q"; - nargv[i++] = "-T"; - nargv[i++] = "-x"; - if (hg_user) { - nargv[i++] = "-l"; - nargv[i++] = hg_user; - } - nargv[i++] = hg_host; + nargv[i++] = ssh; + nargv[i++] = "-q"; + nargv[i++] = "-T"; + nargv[i++] = "-x"; + if (hg_user) { + nargv[i++] = "-l"; + nargv[i++] = hg_user; + } + nargv[i++] = hg_host; - /* - * sshd called us with added "-c", because it thinks we are a shell. - * drop it if we find it. - */ - j = 1; - if (j < argc && strcmp(argv[j], "-c") == 0) { - j++; - } + /* + * sshd called us with added "-c", because it thinks we are a shell. + * drop it if we find it. + */ + j = 1; + if (j < argc && strcmp(argv[j], "-c") == 0) { + j++; + } - for (; j < argc; i++, j++) { - nargv[i] = argv[j]; - } - nargv[i] = NULL; + for (; j < argc; i++, j++) { + nargv[i] = argv[j]; + } + nargv[i] = NULL; - if (debug) { - print_cmdline(i, nargv); - } + if (debug) { + print_cmdline(i, nargv); + } - execv(ssh, nargv); - perror(ssh); - exit(EX_UNAVAILABLE); + execv(ssh, nargv); + perror(ssh); + exit(EX_UNAVAILABLE); } /* @@ -209,44 +209,44 @@ */ static void run_shell(int argc, char **argv) { - char *hg_shell = HG_SHELL; - char **nargv; - char *c; - int i; + char *hg_shell = HG_SHELL; + char **nargv; + char *c; + int i; - nargv = alloca((argc + 3) * sizeof(char *)); - c = strrchr(hg_shell, '/'); + nargv = alloca((argc + 3) * sizeof(char *)); + c = strrchr(hg_shell, '/'); - /* tell "real" shell it is login shell, if needed. */ + /* tell "real" shell it is login shell, if needed. */ - if (argv[0][0] == '-' && c) { - nargv[0] = strdup(c); - if (nargv[0] == NULL) { - perror("malloc"); - exit(EX_OSERR); - } - nargv[0][0] = '-'; - } else { - nargv[0] = hg_shell; - } + if (argv[0][0] == '-' && c) { + nargv[0] = strdup(c); + if (nargv[0] == NULL) { + perror("malloc"); + exit(EX_OSERR); + } + nargv[0][0] = '-'; + } else { + nargv[0] = hg_shell; + } - for (i = 1; i < argc; i++) { - nargv[i] = argv[i]; - } - nargv[i] = NULL; + for (i = 1; i < argc; i++) { + nargv[i] = argv[i]; + } + nargv[i] = NULL; - if (debug) { - print_cmdline(i, nargv); - } + if (debug) { + print_cmdline(i, nargv); + } - execv(hg_shell, nargv); - perror(hg_shell); - exit(EX_OSFILE); + execv(hg_shell, nargv); + perror(hg_shell); + exit(EX_OSFILE); } enum cmdline { - hg_init, - hg_serve, + hg_init, + hg_serve, }; @@ -256,25 +256,25 @@ */ static int validate_repo(const char *repo_root, const char *subdir) { - char *abs_path; - struct stat st; - int ret; + char *abs_path; + struct stat st; + int ret; - if (asprintf(&abs_path, "%s.hg/%s", repo_root, subdir) == -1) { - ret = -1; - goto bail; - } + if (asprintf(&abs_path, "%s.hg/%s", repo_root, subdir) == -1) { + ret = -1; + goto bail; + } - /* verify that we really are looking at valid repo. */ + /* verify that we really are looking at valid repo. */ - if (stat(abs_path, &st) == -1) { - ret = 0; - } else { - ret = 1; - } + if (stat(abs_path, &st) == -1) { + ret = 0; + } else { + ret = 1; + } bail: - return ret; + return ret; } /* @@ -282,158 +282,159 @@ */ static void serve_data(int argc, char **argv) { - char *hg_root = HG_ROOT; - char *repo, *repo_root; - enum cmdline cmd; - char *nargv[6]; - size_t repolen; - int i; - - /* - * check argv for looking okay. we should be invoked with argv - * resembling like this: - * - * hgsh - * -c - * hg -R some/path serve --stdio - * - * the "-c" is added by sshd, because it thinks we are login shell. - */ + char *hg_root = HG_ROOT; + char *repo, *repo_root; + enum cmdline cmd; + char *nargv[6]; + size_t repolen; + int i; - if (argc != 3) { - goto badargs; - } - - if (strcmp(argv[1], "-c") != 0) { - goto badargs; - } - - if (sscanf(argv[2], "hg init %as", &repo) == 1) { - cmd = hg_init; - } - else if (sscanf(argv[2], "hg -R %as serve --stdio", &repo) == 1) { - cmd = hg_serve; - } else { - goto badargs; - } - - repolen = repo ? strlen(repo) : 0; + /* + * check argv for looking okay. we should be invoked with argv + * resembling like this: + * + * hgsh + * -c + * hg -R some/path serve --stdio + * + * the "-c" is added by sshd, because it thinks we are login shell. + */ - if (repolen == 0) { - goto badargs; - } - - if (hg_root) { - if (asprintf(&repo_root, "%s/%s/", hg_root, repo) == -1) { - goto badargs; - } + if (argc != 3) { + goto badargs; + } - /* - * attempt to stop break out from inside the repository tree. could - * do something more clever here, because e.g. we could traverse a - * symlink that looks safe, but really breaks us out of tree. - */ - - if (strstr(repo_root, "/../") != NULL) { - goto badargs; - } - - /* only hg init expects no repo. */ + if (strcmp(argv[1], "-c") != 0) { + goto badargs; + } - if (cmd != hg_init) { - int valid; - - valid = validate_repo(repo_root, "data"); - - if (valid == -1) { + if (sscanf(argv[2], "hg init %as", &repo) == 1) { + cmd = hg_init; + } + else if (sscanf(argv[2], "hg -R %as serve --stdio", &repo) == 1) { + cmd = hg_serve; + } else { goto badargs; - } + } - if (valid == 0) { - valid = validate_repo(repo_root, "store"); + repolen = repo ? strlen(repo) : 0; - if (valid == -1) { - goto badargs; - } - } - - if (valid == 0) { - perror(repo); - exit(EX_DATAERR); - } + if (repolen == 0) { + goto badargs; } - if (chdir(hg_root) == -1) { - perror(hg_root); - exit(EX_SOFTWARE); - } - } + if (hg_root) { + if (asprintf(&repo_root, "%s/%s/", hg_root, repo) == -1) { + goto badargs; + } + + /* + * attempt to stop break out from inside the + * repository tree. could do something more clever + * here, because e.g. we could traverse a symlink that + * looks safe, but really breaks us out of tree. + */ + + if (strstr(repo_root, "/../") != NULL) { + goto badargs; + } - i = 0; + /* only hg init expects no repo. */ + + if (cmd != hg_init) { + int valid; + + valid = validate_repo(repo_root, "data"); + + if (valid == -1) { + goto badargs; + } + + if (valid == 0) { + valid = validate_repo(repo_root, "store"); + + if (valid == -1) { + goto badargs; + } + } - switch (cmd) { - case hg_serve: - nargv[i++] = HG; - nargv[i++] = "-R"; - nargv[i++] = repo; - nargv[i++] = "serve"; - nargv[i++] = "--stdio"; - break; - case hg_init: - nargv[i++] = HG; - nargv[i++] = "init"; - nargv[i++] = repo; - break; - } + if (valid == 0) { + perror(repo); + exit(EX_DATAERR); + } + } + + if (chdir(hg_root) == -1) { + perror(hg_root); + exit(EX_SOFTWARE); + } + } + + i = 0; - nargv[i] = NULL; + switch (cmd) { + case hg_serve: + nargv[i++] = HG; + nargv[i++] = "-R"; + nargv[i++] = repo; + nargv[i++] = "serve"; + nargv[i++] = "--stdio"; + break; + case hg_init: + nargv[i++] = HG; + nargv[i++] = "init"; + nargv[i++] = repo; + break; + } - if (debug) { - print_cmdline(i, nargv); - } + nargv[i] = NULL; - execv(HG, nargv); - perror(HG); - exit(EX_UNAVAILABLE); + if (debug) { + print_cmdline(i, nargv); + } + + execv(HG, nargv); + perror(HG); + exit(EX_UNAVAILABLE); badargs: - /* print useless error message. */ + /* print useless error message. */ - usage("invalid arguments", EX_DATAERR); + usage("invalid arguments", EX_DATAERR); } int main(int argc, char **argv) { - char host[1024]; - char *c; + char host[1024]; + char *c; - if (gethostname(host, sizeof(host)) == -1) { - perror("gethostname"); - exit(EX_OSERR); - } + if (gethostname(host, sizeof(host)) == -1) { + perror("gethostname"); + exit(EX_OSERR); + } - if ((c = strchr(host, '.')) != NULL) { - *c = '\0'; - } + if ((c = strchr(host, '.')) != NULL) { + *c = '\0'; + } - if (getenv("SSH_CLIENT")) { - char *hg_gateway = HG_GATEWAY; - char *hg_host = HG_HOST; + if (getenv("SSH_CLIENT")) { + char *hg_gateway = HG_GATEWAY; + char *hg_host = HG_HOST; - if (hg_gateway && strcmp(host, hg_gateway) == 0) { - forward_through_gateway(argc, argv); - } + if (hg_gateway && strcmp(host, hg_gateway) == 0) { + forward_through_gateway(argc, argv); + } - if (hg_host && strcmp(host, hg_host) != 0) { - usage("invoked on unexpected host", EX_USAGE); - } + if (hg_host && strcmp(host, hg_host) != 0) { + usage("invoked on unexpected host", EX_USAGE); + } - serve_data(argc, argv); - } else if (HG_SHELL) { - run_shell(argc, argv); - } else { - usage("invalid arguments", EX_DATAERR); - } + serve_data(argc, argv); + } else if (HG_SHELL) { + run_shell(argc, argv); + } else { + usage("invalid arguments", EX_DATAERR); + } - return 0; + return 0; }