From owner-p4-projects@FreeBSD.ORG Sat Jun 12 03:34:10 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3718A1065690; Sat, 12 Jun 2010 03:34:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EE4EF1065674; Sat, 12 Jun 2010 03:34:09 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-iw0-f182.google.com (mail-iw0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id EF6B28FC0A; Sat, 12 Jun 2010 03:34:08 +0000 (UTC) Received: by iwn7 with SMTP id 7so2390210iwn.13 for ; Fri, 11 Jun 2010 20:34:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:sender:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=u7i5lw+4PBPKhyeJ3gK1hnbeZxnMpp/+YrUbE1MhIYY=; b=TFG0smPaArHVkX2gCSiPiLv4qXBTfWvWCkaJQmurJJ2s8Dl83RC86v1pP7Dk8GCrJi DrvAuvJVVL7DfJayR5oUI2RO+ndS4uqJjmSBbekXjRBJPTA8cu+eg10rRDQK2xTGoON6 w1k+HgV1pumHrvFfpVR6+6X4rhy76j2r3xNVE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=azgpdnWMSs6o06rf+QEy5znVe01PlJuUduWTKgzM0bJ4lgl+lUD4dO2CUB2I0knkRd uJ53XxlP39kORjaLXfUWOLKrxnNn3Aiwd7AjLkB3hdYnLD8QJsg9O7bP1vgo1JkZlL3F TpgvURiyVbA5rqshGU4KLyW76cvr5srSwXFUc= MIME-Version: 1.0 Received: by 10.231.130.152 with SMTP id t24mr2797834ibs.146.1276313646622; Fri, 11 Jun 2010 20:34:06 -0700 (PDT) Sender: yanegomi@gmail.com Received: by 10.231.69.19 with HTTP; Fri, 11 Jun 2010 20:34:06 -0700 (PDT) In-Reply-To: <201006120038.o5C0cUSG099427@repoman.freebsd.org> References: <201006120038.o5C0cUSG099427@repoman.freebsd.org> Date: Fri, 11 Jun 2010 20:34:06 -0700 X-Google-Sender-Auth: L-zrWTw-dnlvRsBKWeX3OrgNh_c Message-ID: From: Garrett Cooper To: Ivan Voras Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Perforce Change Reviews Subject: Re: PERFORCE change 179508 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Jun 2010 03:34:10 -0000 On Fri, Jun 11, 2010 at 5:38 PM, Ivan Voras wrote: > http://p4web.freebsd.org/@@179508?ac=3D10 > > Change 179508 by ivoras@betelgeuse on 2010/06/12 00:37:31 > > =A0 =A0 =A0 =A0Start parsing the +PKGPATCH file > > Affected files ... > > .. //depot/projects/soc2010/pkg_patch/src/patch/Makefile#12 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.c#2 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/applypatch.h#2 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.c#11 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/hashjob.h#11 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/main.c#12 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.c#10 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/mkpatch.h#10 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/pkg_patch.h#10 edit > .. //depot/projects/soc2010/pkg_patch/src/patch/support.c#9 edit > > Differences ... > > =3D=3D=3D=3D //depot/projects/soc2010/pkg_patch/src/patch/Makefile#12 (te= xt+ko) =3D=3D=3D=3D > > > =3D=3D=3D=3D //depot/projects/soc2010/pkg_patch/src/patch/applypatch.c#2 = (text+ko) =3D=3D=3D=3D > > @@ -34,7 +34,89 @@ > =A0#include "hashjob.h" > > > +enum PPACTION { PPACTION_UNKNOWN, PPACTION_ADD, PPACTION_REMOVE, > + =A0 =A0PPACTION_RMDIR, PPACTION_PATCH }; > +enum PPMETHOD { PPMETHOD_UNKNOWN, PPMETHOD_CP, PPMETHOD_BSDIFF }; > + > + > +SLIST_HEAD(pplist_head, pplist); > +struct pplist { > + =A0 =A0 =A0 char =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0filename[PATH_M= AX]; > + =A0 =A0 =A0 enum PPACTION =A0 =A0 =A0 =A0 =A0 action; > + =A0 =A0 =A0 enum PPMETHOD =A0 =A0 =A0 =A0 =A0 method; > + =A0 =A0 =A0 SLIST_ENTRY(pplist) =A0 =A0 linkage; > +}; > + > + > +struct pkgpatch { > + =A0 =A0 =A0 short int =A0 =A0 =A0 =A0 =A0 =A0 =A0 version_major; > + =A0 =A0 =A0 short int =A0 =A0 =A0 =A0 =A0 =A0 =A0 version_minor; > + =A0 =A0 =A0 char =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0source[PATH_MAX= ]; > + =A0 =A0 =A0 char =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0target[PATH_MAX= ]; > + =A0 =A0 =A0 struct pplist_head =A0 =A0 =A0pplist; > +}; > + > + > +static void > +read_pkgpatch_file(char *filename, struct pkgpatch *pp) > +{ > + =A0 =A0 =A0 FILE *fp; > + =A0 =A0 =A0 char line[PATH_MAX], *p, *p2, *cmd; > + > + =A0 =A0 =A0 fp =3D fopen(filename, "r"); > + =A0 =A0 =A0 if (fp =3D=3D NULL) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Cannot open file: %s", filename); > + =A0 =A0 =A0 memset(pp, 0, sizeof(*pp)); > + =A0 =A0 =A0 SLIST_INIT(&pp->pplist); > + =A0 =A0 =A0 while (fgets(line, PATH_MAX, fp) !=3D NULL) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cmd =3D line; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 p =3D strchr(line, ' '); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 *p++ =3D '\0'; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (strcmp(cmd, "@version") =3D=3D 0) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 p2 =3D strchr(p, '.'); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 *p2++ =3D '\0'; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pp->version_major =3D atoi(= p); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pp->version_minor =3D atoi(= p2); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@source") =3D=3D 0)= { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@target") =3D=3D 0)= { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@add") =3D=3D 0) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@remove") =3D=3D 0)= { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@rmdir") =3D=3D 0) = { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else if (strcmp(cmd, "@patch") =3D=3D 0) = { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 errx(1, "Unknown command: %= s", cmd); > + > + =A0 =A0 =A0 } > + =A0 =A0 =A0 fclose(fp); > +} > + > + > =A0void > =A0perform_applypatch() > =A0{ > + =A0 =A0 =A0 char fpatch[PATH_MAX], dpatch[PATH_MAX], tmp[PATH_MAX]; > + =A0 =A0 =A0 struct pkgxjob xpatch; > + =A0 =A0 =A0 struct pkgpatch pp; > + > + =A0 =A0 =A0 if (argc < 1) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 errx(1, "Expecting argument: patch filename= "); > + =A0 =A0 =A0 if (realpath(argv[0], fpatch) =3D=3D NULL) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Error resolving path: %s", argv[0])= ; > + =A0 =A0 =A0 if (access(fpatch, F_OK) !=3D 0) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "File not found: %s", fpatch); > + =A0 =A0 =A0 if (access(fpatch, R_OK) !=3D 0) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Access error reading file: %s", fpa= tch); > + =A0 =A0 =A0 snprintf(dpatch, PATH_MAX, "%s/patch", my_tmp); > + =A0 =A0 =A0 if (mkdir(dpatch, 0700) !=3D 0) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Cannot create directory: %s", dpatc= h); > + =A0 =A0 =A0 if (pkgxjob_start(&xpatch, dpatch, fpatch) !=3D 0) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Canot extract package %s to %s (sta= rt)", fpatch, 1. Typo. 2. Does pkgxjob_start set a meaningful errno? > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dpatch); > + =A0 =A0 =A0 if (pkgxjob_finish(&xpatch) !=3D 0) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 err(1, "Cannot extract package %s to %s (fi= nish)", fpatch, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dpatch); > + > + =A0 =A0 =A0 snprintf(tmp, PATH_MAX, "%s/%s", dpatch, PKGPATCH_FNAME); > + =A0 =A0 =A0 read_pkgpatch_file(tmp, &pp); Does this function ever fail? > =A0} Thanks! -Garrett