=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/util.c,v retrieving revision 1.96 retrieving revision 1.97 diff -c -r1.96 -r1.97 *** src/usr.bin/cvs/util.c 2007/01/07 01:53:12 1.96 --- src/usr.bin/cvs/util.c 2007/01/11 17:44:18 1.97 *************** *** 1,4 **** ! /* $OpenBSD: util.c,v 1.96 2007/01/07 01:53:12 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * Copyright (c) 2005, 2006 Joris Vink --- 1,4 ---- ! /* $OpenBSD: util.c,v 1.97 2007/01/11 17:44:18 niallo Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * Copyright (c) 2005, 2006 Joris Vink *************** *** 738,769 **** * Split the contents of a file into a list of lines. */ struct cvs_lines * ! cvs_splitlines(const char *fcont) { ! char *dcp; struct cvs_lines *lines; struct cvs_line *lp; lines = xmalloc(sizeof(*lines)); TAILQ_INIT(&(lines->l_lines)); - lines->l_nblines = 0; - lines->l_data = xstrdup(fcont); lp = xmalloc(sizeof(*lp)); ! lp->l_line = NULL; ! lp->l_lineno = 0; TAILQ_INSERT_TAIL(&(lines->l_lines), lp, l_list); ! for (dcp = lines->l_data; *dcp != '\0';) { ! lp = xmalloc(sizeof(*lp)); ! lp->l_line = dcp; ! lp->l_lineno = ++(lines->l_nblines); ! TAILQ_INSERT_TAIL(&(lines->l_lines), lp, l_list); ! ! dcp = strchr(dcp, '\n'); ! if (dcp == NULL) ! break; ! *(dcp++) = '\0'; } return (lines); --- 738,770 ---- * Split the contents of a file into a list of lines. */ struct cvs_lines * ! cvs_splitlines(const u_char *data, size_t len) { ! u_char *p, *c; ! size_t i, tlen; struct cvs_lines *lines; struct cvs_line *lp; lines = xmalloc(sizeof(*lines)); + memset(lines, 0, sizeof(*lines)); TAILQ_INIT(&(lines->l_lines)); lp = xmalloc(sizeof(*lp)); ! memset(lp, 0, sizeof(*lp)); TAILQ_INSERT_TAIL(&(lines->l_lines), lp, l_list); ! p = c = data; ! for (i = 0; i < len; i++) { ! if (*p == '\n' || (i == len - 1)) { ! tlen = p - c + 1; ! lp = xmalloc(sizeof(*lp)); ! lp->l_line = c; ! lp->l_len = tlen; ! lp->l_lineno = ++(lines->l_nblines); ! TAILQ_INSERT_TAIL(&(lines->l_lines), lp, l_list); ! c = p + 1; ! } ! p++; } return (lines); *************** *** 779,804 **** xfree(lp); } - xfree(lines->l_data); xfree(lines); } BUF * ! cvs_patchfile(const char *data, const char *patch, int (*p)(struct cvs_lines *, struct cvs_lines *)) { struct cvs_lines *dlines, *plines; struct cvs_line *lp; - size_t len; - int lineno; BUF *res; ! len = strlen(data); ! ! if ((dlines = cvs_splitlines(data)) == NULL) return (NULL); ! if ((plines = cvs_splitlines(patch)) == NULL) return (NULL); if (p(dlines, plines) < 0) { --- 780,800 ---- xfree(lp); } xfree(lines); } BUF * ! cvs_patchfile(const u_char *data, size_t dlen, const u_char *patch, size_t plen, int (*p)(struct cvs_lines *, struct cvs_lines *)) { struct cvs_lines *dlines, *plines; struct cvs_line *lp; BUF *res; ! if ((dlines = cvs_splitlines(data, dlen)) == NULL) return (NULL); ! if ((plines = cvs_splitlines(patch, plen)) == NULL) return (NULL); if (p(dlines, plines) < 0) { *************** *** 807,818 **** return (NULL); } ! lineno = 0; ! res = cvs_buf_alloc(len, BUF_AUTOEXT); TAILQ_FOREACH(lp, &dlines->l_lines, l_list) { ! if (lineno != 0) ! cvs_buf_fappend(res, "%s\n", lp->l_line); ! lineno++; } cvs_freelines(dlines); --- 803,813 ---- return (NULL); } ! res = cvs_buf_alloc(1024, BUF_AUTOEXT); TAILQ_FOREACH(lp, &dlines->l_lines, l_list) { ! if (lp->l_line == NULL) ! continue; ! cvs_buf_append(res, lp->l_line, lp->l_len); } cvs_freelines(dlines);