diff options
author | Joris Vink <joris@cvs.openbsd.org> | 2005-12-30 16:47:37 +0000 |
---|---|---|
committer | Joris Vink <joris@cvs.openbsd.org> | 2005-12-30 16:47:37 +0000 |
commit | 0b75fabf2a362c8d46c563c1727856429c95590b (patch) | |
tree | 7ce59558027d8b470075e06ebe1ad33d091b898f | |
parent | c652e17dc922f98dd69c8e12c38752bf5491bd30 (diff) |
more code cleanup, ok niallo@ and xsa@
-rw-r--r-- | usr.bin/cvs/cvs.h | 4 | ||||
-rw-r--r-- | usr.bin/cvs/proto.c | 62 | ||||
-rw-r--r-- | usr.bin/cvs/proto.h | 6 | ||||
-rw-r--r-- | usr.bin/cvs/req.c | 5 | ||||
-rw-r--r-- | usr.bin/cvs/resp.c | 116 | ||||
-rw-r--r-- | usr.bin/cvs/util.c | 15 |
6 files changed, 80 insertions, 128 deletions
diff --git a/usr.bin/cvs/cvs.h b/usr.bin/cvs/cvs.h index 89296c0df67..bd434b0de06 100644 --- a/usr.bin/cvs/cvs.h +++ b/usr.bin/cvs/cvs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cvs.h,v 1.94 2005/12/30 02:03:28 joris Exp $ */ +/* $OpenBSD: cvs.h,v 1.95 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -430,7 +430,7 @@ struct cvs_lines { int cvs_readrepo(const char *, char *, size_t); int cvs_modetostr(mode_t, char *, size_t); -int cvs_strtomode(const char *, mode_t *); +void cvs_strtomode(const char *, mode_t *); int cvs_splitpath(const char *, char *, size_t, char **); int cvs_mkadmin(const char *, const char *, const char *, char *, char *, int); diff --git a/usr.bin/cvs/proto.c b/usr.bin/cvs/proto.c index ae9e5566820..3cb5b4eea79 100644 --- a/usr.bin/cvs/proto.c +++ b/usr.bin/cvs/proto.c @@ -1,4 +1,4 @@ -/* $OpenBSD: proto.c,v 1.82 2005/12/30 02:03:28 joris Exp $ */ +/* $OpenBSD: proto.c,v 1.83 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -559,23 +559,14 @@ cvs_recvfile(struct cvsroot *root, mode_t *mode) fbuf = cvs_buf_alloc(sizeof(buf), BUF_AUTOEXT); - if ((cvs_getln(root, buf, sizeof(buf)) < 0) || - (cvs_strtomode(buf, mode) < 0)) { - cvs_buf_free(fbuf); - return (NULL); - } + cvs_getln(root, buf, sizeof(buf)); + cvs_strtomode(buf, mode); - if (cvs_getln(root, buf, sizeof(buf)) < 0) { - cvs_buf_free(fbuf); - return (NULL); - } + cvs_getln(root, buf, sizeof(buf)); fsz = (off_t)strtol(buf, &ep, 10); - if (*ep != '\0') { - cvs_log(LP_ERR, "parse error in file size transmission"); - cvs_buf_free(fbuf); - return (NULL); - } + if (*ep != '\0') + fatal("parse error in file size transmission"); cnt = 0; do { @@ -583,18 +574,7 @@ cvs_recvfile(struct cvsroot *root, mode_t *mode) if (len == 0) break; ret = cvs_recvraw(root, buf, len); - if (ret == -1) { - cvs_buf_free(fbuf); - return (NULL); - } - - if (cvs_buf_append(fbuf, buf, (size_t)ret) == -1) { - cvs_log(LP_ERR, - "failed to append received file data"); - cvs_buf_free(fbuf); - return (NULL); - } - + cvs_buf_append(fbuf, buf, (size_t)ret); cnt += (off_t)ret; } while (cnt < fsz); @@ -696,10 +676,8 @@ cvs_getresp(struct cvsroot *root) * * Get a line from the remote end and store it in <lbuf>. The terminating * newline character is stripped from the result. - * Returns the length in bytes of the line (not including the NUL byte), or - * -1 on failure. */ -int +void cvs_getln(struct cvsroot *root, char *lbuf, size_t len) { size_t rlen; @@ -712,8 +690,8 @@ cvs_getln(struct cvsroot *root, char *lbuf, size_t len) if (fgets(lbuf, (int)len, in) == NULL) { if (ferror(in)) { - cvs_log(LP_ERRNO, "failed to read line"); - return (-1); + fatal("cvs_getln: error reading server: %s", + strerror(errno)); } if (feof(in)) @@ -726,8 +704,6 @@ cvs_getln(struct cvsroot *root, char *lbuf, size_t len) rlen = strlen(lbuf); if ((rlen > 0) && (lbuf[rlen - 1] == '\n')) lbuf[--rlen] = '\0'; - - return (rlen); } @@ -863,7 +839,7 @@ cvs_sendraw(struct cvsroot *root, const void *src, size_t len) * * Receive the first <len> bytes from the buffer <src> to the server. */ -ssize_t +size_t cvs_recvraw(struct cvsroot *root, void *dst, size_t len) { size_t ret; @@ -875,11 +851,17 @@ cvs_recvraw(struct cvsroot *root, void *dst, size_t len) in = root->cr_srvout; ret = fread(dst, sizeof(char), len, in); - if (ret == 0) - return (-1); - if (cvs_server_outlog != NULL) - fwrite(dst, sizeof(char), len, cvs_server_outlog); - return (ssize_t)ret; + if (ret == 0) { + if (ferror(in)) { + fatal("cvs_recvraw: error reading from server: %s", + strerror(errno)); + } + } else { + if (cvs_server_outlog != NULL) + fwrite(dst, sizeof(char), len, cvs_server_outlog); + } + + return (ret); } diff --git a/usr.bin/cvs/proto.h b/usr.bin/cvs/proto.h index 1df7b7ff2a0..cbbfa98a93a 100644 --- a/usr.bin/cvs/proto.h +++ b/usr.bin/cvs/proto.h @@ -1,4 +1,4 @@ -/* $OpenBSD: proto.h,v 1.9 2005/12/30 02:03:28 joris Exp $ */ +/* $OpenBSD: proto.h,v 1.10 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -184,13 +184,13 @@ char* cvs_resp_getvalid(void); void cvs_sendreq(struct cvsroot *, u_int, const char *); void cvs_getresp(struct cvsroot *); int cvs_sendresp(u_int, const char *); -int cvs_getln(struct cvsroot *, char *, size_t); +void cvs_getln(struct cvsroot *, char *, size_t); void cvs_senddir(struct cvsroot *, CVSFILE *); void cvs_sendarg(struct cvsroot *, const char *, int); void cvs_sendln(struct cvsroot *, const char *); void cvs_sendentry(struct cvsroot *, const CVSFILE *); void cvs_sendraw(struct cvsroot *, const void *, size_t); -ssize_t cvs_recvraw(struct cvsroot *, void *, size_t); +size_t cvs_recvraw(struct cvsroot *, void *, size_t); #endif /* PROTO_H */ diff --git a/usr.bin/cvs/req.c b/usr.bin/cvs/req.c index ea9237959c3..e1c3e4b41f6 100644 --- a/usr.bin/cvs/req.c +++ b/usr.bin/cvs/req.c @@ -1,4 +1,4 @@ -/* $OpenBSD: req.c,v 1.38 2005/12/24 19:07:52 xsa Exp $ */ +/* $OpenBSD: req.c,v 1.39 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -266,8 +266,7 @@ cvs_req_directory(int reqid, char *line) pwd = (!strcmp(line, ".")); - if (cvs_getln(NULL, rdir, sizeof(rdir)) < 0) - return (-1); + cvs_getln(NULL, rdir, sizeof(rdir)); STRIP_SLASH(rdir); diff --git a/usr.bin/cvs/resp.c b/usr.bin/cvs/resp.c index 98aac46d694..a81af510ced 100644 --- a/usr.bin/cvs/resp.c +++ b/usr.bin/cvs/resp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: resp.c,v 1.66 2005/12/29 21:28:26 joris Exp $ */ +/* $OpenBSD: resp.c,v 1.67 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -336,8 +336,7 @@ cvs_resp_statdir(struct cvsroot *root, int type, char *line) char rpath[MAXPATHLEN], statpath[MAXPATHLEN]; /* remote directory line */ - if (cvs_getln(root, rpath, sizeof(rpath)) < 0) - return (-1); + cvs_getln(root, rpath, sizeof(rpath)); STRIP_SLASH(line); @@ -387,8 +386,7 @@ cvs_resp_sticky(struct cvsroot *root, int type, char *line) char buf[MAXPATHLEN]; /* get the remote path */ - if (cvs_getln(root, buf, sizeof(buf)) < 0) - return (-1); + cvs_getln(root, buf, sizeof(buf)); STRIP_SLASH(line); @@ -501,12 +499,10 @@ cvs_resp_newentry(struct cvsroot *root, int type, char *line) struct cvs_ent *ent; /* get the remote path */ - if (cvs_getln(root, entbuf, sizeof(entbuf)) < 0) - return (-1); + cvs_getln(root, entbuf, sizeof(entbuf)); /* get the new Entries line */ - if (cvs_getln(root, entbuf, sizeof(entbuf)) < 0) - return (-1); + cvs_getln(root, entbuf, sizeof(entbuf)); if (resp_check_dir(root, line) < 0) return (-1); @@ -569,33 +565,27 @@ static int cvs_resp_copyfile(struct cvsroot *root, int type, char *line) { int len; - char path[MAXPATHLEN], newpath[MAXPATHLEN], newname[MAXNAMLEN], *file; + char path[MAXPATHLEN], newpath[MAXPATHLEN]; + char newname[MAXNAMLEN], *file; /* read the remote path of the file to copy and its new name */ - if ((cvs_getln(root, path, sizeof(path)) < 0) || - (cvs_getln(root, newname, sizeof(newname)) < 0)) - return (-1); + cvs_getln(root, path, sizeof(path)); + cvs_getln(root, newname, sizeof(newname)); - if ((file = basename(path)) == NULL) { - cvs_log(LP_ERR, "no base file name in Copy-file path"); - return (-1); - } + if ((file = basename(path)) == NULL) + fatal("no base file name in Copy-file path"); len = snprintf(path, sizeof(path), "%s%s", line, file); - if (len == -1 || len >= (int)sizeof(path)) { - cvs_log(LP_ERR, "source path overflow in Copy-file response"); - return (-1); - } + if (len == -1 || len >= (int)sizeof(path)) + fatal("source path overflow in Copy-file response"); + len = snprintf(newpath, sizeof(newpath), "%s%s", line, newname); - if (len == -1 || len >= (int)sizeof(path)) { - cvs_log(LP_ERR, - "destination path overflow in Copy-file response"); - return (-1); - } + if (len == -1 || len >= (int)sizeof(path)) + fatal("destination path overflow in Copy-file response"); if (rename(path, newpath) == -1) { - cvs_log(LP_ERRNO, "failed to rename %s to %s", path, newpath); - return (-1); + fatal("failed to rename %s to %s: %s", + path, newpath, strerror(errno)); } return (0); @@ -636,20 +626,18 @@ cvs_resp_updated(struct cvsroot *root, int type, char *line) STRIP_SLASH(line); /* read the remote path of the file */ - if (cvs_getln(root, path, sizeof(path)) < 0) - return (-1); + cvs_getln(root, path, sizeof(path)); /* read the new entry */ - if (cvs_getln(root, path, sizeof(path)) < 0) - return (-1); + cvs_getln(root, path, sizeof(path)); if ((ent = cvs_ent_parse(path)) == NULL) return (-1); + ret = snprintf(path, sizeof(path), "%s/%s", line, ent->ce_name); - if (ret == -1 || ret >= (int)sizeof(path)) { - cvs_log(LP_ERR, "Entries path overflow in response"); - return (-1); - } + if (ret == -1 || ret >= (int)sizeof(path)) + fatal("Entries path overflow in response"); + ret = 0; /* @@ -675,13 +663,9 @@ cvs_resp_updated(struct cvsroot *root, int type, char *line) } } - if (cvs_ent_add(cvs_resp_lastent, ent) < 0) { - cvs_ent_free(ent); - return (-1); - } + cvs_ent_add(cvs_resp_lastent, ent); - if ((fbuf = cvs_recvfile(root, &fmode)) == NULL) - return (-1); + fbuf = cvs_recvfile(root, &fmode); cvs_buf_write(fbuf, path, fmode); cvs_buf_free(fbuf); @@ -727,18 +711,15 @@ static int cvs_resp_removed(struct cvsroot *root, int type, char *line) { int l; - char buf[MAXPATHLEN], base[MAXPATHLEN], fpath[MAXPATHLEN], *file; + char buf[MAXPATHLEN], base[MAXPATHLEN]; + char fpath[MAXPATHLEN], *file; - if (cvs_getln(root, buf, sizeof(buf)) < 0) - return (-1); + cvs_getln(root, buf, sizeof(buf)); cvs_splitpath(buf, base, sizeof(base), &file); l = snprintf(fpath, sizeof(fpath), "%s/%s", line, file); - if (l == -1 || l >= (int)sizeof(fpath)) { - errno = ENAMETOOLONG; - cvs_log(LP_ERRNO, "%s", fpath); - return (-1); - } + if (l == -1 || l >= (int)sizeof(fpath)) + fatal("cvs_resp_removed: overflow in path"); if (resp_check_dir(root, line) < 0) return (-1); @@ -762,10 +743,7 @@ cvs_resp_removed(struct cvsroot *root, int type, char *line) static int cvs_resp_mode(struct cvsroot *root, int type, char *line) { - if (cvs_strtomode(line, &cvs_lastmode) < 0) { - cvs_log(LP_ERR, "error handling Mode response"); - return (-1); - } + cvs_strtomode(line, &cvs_lastmode); return (0); } @@ -799,21 +777,17 @@ cvs_resp_rcsdiff(struct cvsroot *root, int type, char *line) struct cvs_ent *ent; /* get remote path and build local path of file to be patched */ - if (cvs_getln(root, buf, sizeof(buf)) < 0) - return (-1); + cvs_getln(root, buf, sizeof(buf)); fname = strrchr(buf, '/'); if (fname == NULL) fname = buf; len = snprintf(file, sizeof(file), "%s%s", line, fname); - if (len == -1 || len >= (int)sizeof(file)) { - cvs_log(LP_ERR, "path overflow in Rcs-diff response"); - return (-1); - } + if (len == -1 || len >= (int)sizeof(file)) + fatal("path overflow in Rcs-diff response"); /* get updated entry fields */ - if (cvs_getln(root, buf, sizeof(buf)) < 0) - return (-1); + cvs_getln(root, buf, sizeof(buf)); ent = cvs_ent_parse(buf); if (ent == NULL) @@ -872,8 +846,7 @@ cvs_resp_template(struct cvsroot *root, int type, char *line) BUF *tmpl; tmpl = cvs_recvfile(root, &mode); - if (tmpl == NULL) - return (-1); + cvs_buf_free(tmpl); return (0); } @@ -895,7 +868,7 @@ resp_check_dir(struct cvsroot *root, const char *dir) */ l = snprintf(cvspath, sizeof(cvspath), "%s/%s", dir, CVS_PATH_CVSDIR); if (l == -1 || l >= (int)sizeof(cvspath)) - return (-1); + fatal("resp_check_dir: path overflow"); if (stat(cvspath, &st) == -1) { if (errno != ENOENT) @@ -904,9 +877,11 @@ resp_check_dir(struct cvsroot *root, const char *dir) l = snprintf(repo, sizeof(repo), "%s/%s", cvs_repo_base, dir); if (l == -1 || l >= (int)sizeof(repo)) - return (-1); + fatal("resp_check_dir: path overflow"); } else { - strlcpy(repo, dir, sizeof(repo)); + len = strlcpy(repo, dir, sizeof(repo)); + if (len >= sizeof(repo)) + fatal("resp_check_dir: path truncation"); } if (cvs_mkadmin(dir, root->cr_str, repo, NULL, NULL, 0) < 0) @@ -921,11 +896,8 @@ resp_check_dir(struct cvsroot *root, const char *dir) return (-1); len = strlcpy(cvs_resp_lastdir, dir, sizeof(cvs_resp_lastdir)); - if (len >= sizeof(cvs_resp_lastdir)) { - errno = ENAMETOOLONG; - cvs_log(LP_ERRNO, "%s", cvs_resp_lastdir); - return (-1); - } + if (len >= sizeof(cvs_resp_lastdir)) + fatal("resp_check_dir: path truncation"); } else { /* make sure the old one is still open */ if (cvs_resp_lastent == NULL) { diff --git a/usr.bin/cvs/util.c b/usr.bin/cvs/util.c index c912c7cc58d..922f865419e 100644 --- a/usr.bin/cvs/util.c +++ b/usr.bin/cvs/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.63 2005/12/24 19:07:52 xsa Exp $ */ +/* $OpenBSD: util.c,v 1.64 2005/12/30 16:47:36 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -124,19 +124,20 @@ cvs_readrepo(const char *dir, char *dst, size_t len) * The CVS protocol specification states that any modes or mode types that are * not recognized should be silently ignored. This function does not return * an error in such cases, but will issue warnings. - * Returns 0 on success, or -1 on failure. */ -int +void cvs_strtomode(const char *str, mode_t *mode) { char type; + size_t l; mode_t m; char buf[32], ms[4], *sp, *ep; m = 0; - if (strlcpy(buf, str, sizeof(buf)) >= sizeof(buf)) { - return (-1); - } + l = strlcpy(buf, str, sizeof(buf)); + if (l >= sizeof(buf)) + fatal("cvs_strtomode: string truncation"); + sp = buf; ep = sp; @@ -174,8 +175,6 @@ cvs_strtomode(const char *str, mode_t *mode) } *mode = m; - - return (0); } |