From owner-p4-projects@FreeBSD.ORG Sun Jul 18 23:34:37 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1DF251065670; Sun, 18 Jul 2010 23:34:37 +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 D59F51065678; Sun, 18 Jul 2010 23:34:36 +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 7B7968FC12; Sun, 18 Jul 2010 23:34:36 +0000 (UTC) Received: by iwn35 with SMTP id 35so5045103iwn.13 for ; Sun, 18 Jul 2010 16:34:35 -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=zlRUR7GMuwE8v9FSG6rTb+XssEEuk+JoXLIUWu6EOHg=; b=PHfsvAV0tiynQXRPLj2KjKHiJ8GsEuHE6aHcvU6H3SV49Z+0VfnpQiR5+Bec4LQNlA 8qJQL+EfCWFLJjtH3sHC3cqkryLS90pHDpKYebSdd//tpgsb6YTDC+9de8YUqA6OGGgS AmOUhbUz4Am4Yc+BIGbtI7yp2+3Gy745+zRMc= 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=us9p/lxWuC5U7g/FBGIr/4vabw2AChm2N5nujeOSRdmwD6Zbz2TNellptwUeyO3IJC nUX2XDboDap0tm6qpU1wZGiUfv9hSA4d9ktdyhR2RFY9hLBIf1JqpOAjndu3QBrAhAtm /RNLIr7gDIE7U8AE8XqnTCaxzQqjrsmZfxXpo= MIME-Version: 1.0 Received: by 10.231.39.195 with SMTP id h3mr4736146ibe.88.1279496075773; Sun, 18 Jul 2010 16:34:35 -0700 (PDT) Sender: yanegomi@gmail.com Received: by 10.231.169.18 with HTTP; Sun, 18 Jul 2010 16:34:35 -0700 (PDT) In-Reply-To: References: <201007182159.o6ILxBSq023260@repoman.freebsd.org> Date: Sun, 18 Jul 2010 16:34:35 -0700 X-Google-Sender-Auth: oPzBZZttbCBl4aYzTgIllyOLAZQ Message-ID: From: Garrett Cooper To: Garrett Cooper Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Perforce Change Reviews , Julien Laffaye Subject: Re: PERFORCE change 181154 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: Sun, 18 Jul 2010 23:34:37 -0000 On Sun, Jul 18, 2010 at 4:18 PM, Garrett Cooper wrote= : > On Sun, Jul 18, 2010 at 2:59 PM, Julien Laffaye wr= ote: >> http://p4web.freebsd.org/@@181154?ac=3D10 >> >> Change 181154 by jlaffaye@jlaffaye-chulak on 2010/07/18 21:58:13 >> >> =A0 =A0 =A0 =A0Work In Progress!! >> =A0 =A0 =A0 =A0First step using libarchive(3) instead of tar(1). >> =A0 =A0 =A0 =A0The code needs to be more tested, especially with flags s= uch as Fake. >> >> =A0 =A0 =A0 =A0TODO: >> =A0 =A0 =A0 =A0 - Download the file in pkg_do() if it is an url >> =A0 =A0 =A0 =A0 - Read from stdin if the name is "-" in pkg_do() >> =A0 =A0 =A0 =A0 - Re-implement cleanup() >> =A0 =A0 =A0 =A0 - Find packages for dependencies in extract_package() >> =A0 =A0 =A0 =A0 - Add complete package support in pkg_do() >> =A0 =A0 =A0 =A0 - Slave/Master mode?! in pkg_do() > > Wouldn't it make more sense for extract_package to be in libpkg, > because it's basically a utility function that would be used by > pkg_add and pkg_complete? > > Also, Tim and I discussed initializing the decompressor only once > because it would greatly simplify the code in libpkg today, and would > eliminate wasted CPU cycles used when initializing the decompressor > each time a metadata file is extracted from the archive object. > > Sorry to be a wanker on this too, but considering that all of the code > moved over from extract.c is basically `new code', could it be cleaned > up for style(9)? 1. Some other things: In add/extract.c: for (p =3D pkg.head; p !=3D NULL; p =3D p->next) { if (p->type =3D=3D PLIST_CONFLICTS) { int i; conflict[0] =3D strdup(p->name); conflict[1] =3D NULL; matched =3D matchinstalled(MATCH_GLOB, conflict, &errcode); free(conflict[0]); if (errcode =3D=3D 0 && matched !=3D NULL) for (i =3D 0; matched[i] !=3D NULL; i++) if (isinstalledpkg(matched[i]) > 0) { warnx("package '%s' conflicts with %s", pkg.name, matched[i]); conflictsfound =3D 1; } continue; } The continue is useless. 2. These sprintfs have negative value: if (fexists(INSTALL_FNAME)) { sprintf(post_script, "%s", INSTALL_FNAME); sprintf(pre_arg, "PRE-INSTALL"); sprintf(post_arg, "POST-INSTALL"); } The last two sprintfs could be implemented with strlcpy (and technically I thought that using sprintf without format strings was stylistically illegal). I don't see why the first one needs to be implemented as a sprintf as it's not user-provided (most of the time that's done to avoid security issues with buffer overruns in the str*cat family, IIRC). 3. style(9): if (!Fake && chdir(p->name) =3D=3D -1) { warn("chdir(%s)", p->name); return 1; } 4. You're leaking the archive objects in many spots by not handling this at function exit: archive_read_finish(a); free_plist(&pkg); Even though I don't like suggesting this (globals are nasty... ew), maybe the archive object itself should become a global *just in pkg_add* visible from only perform.c, essentially passed via pointer to extract.c, and be handled in the cleanup function in perform.c, so that it gets mopped up when atexit(3) is called. It's a thought I've briefly entertained right now... Thanks, -Garrett