dockdeps.c revision 9ab815e1e50104cb1004a5ccca7a6da582994b57
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER START
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * The contents of this file are subject to the terms of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Common Development and Distribution License (the "License").
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You may not use this file except in compliance with the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * or http://www.opensolaris.org/os/licensing.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * See the License for the specific language governing permissions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * and limitations under the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * When distributing Covered Code, include this CDDL HEADER in each
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * If applicable, add the following below this CDDL HEADER, with the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * fields enclosed by brackets "[]" replaced with your own identifying
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * information: Portions Copyright [yyyy] [name of copyright owner]
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER END
23a1ccea6aac035f084a7a4cdc968687d1b02dafRoger A. Faulkner * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* All Rights Reserved */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * internal global variables
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic int errflg = 0;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * IMPORTANT NOTE: THE SIZE OF 'abbrev' IS HARD CODED INTO THE CHARACTER
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * ARRAY SSCANF_FORMAT -- YOU MUST UPDATE BOTH VALUES AT THE SAME TIME!!
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic char *SSCANF_FORMAT = "%c %128s %[^\n]";
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * forward declarations
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic void ckrdeps(boolean_t a_preinstallCheck);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic void ckpreq(FILE *fp, char *dname, boolean_t a_preinstallCheck);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic void deponme(char *pkginst, char *pkgname,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic void prereq(char *pkginst, char *pkgname,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandstatic void incompat(char *pkginst, char *pkgname,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * *****************************************************************************
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * global external (public) functions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * *****************************************************************************
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlanddockdeps(char *a_depfile, int a_removeFlag, boolean_t a_preinstallCheck)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* check removal dependencies */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "%s/%s/%s", pkgdir, rmpkginst, DEPEND_FILE);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if ((fp = fopen(a_depfile, "r")) == NULL) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland progerr(ERR_CANNOT_OPEN_DEPEND_FILE, a_depfile,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* check to see if any versions listed are installed */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(wabbrev, sizeof (wabbrev), "%s.*", abbrev);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland inst = fpkginst(wabbrev, alist[i], vlist[i]);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (inst && (pkginfo(&info, inst, NULL, NULL) == 0)) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland } while (++i < nlist);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) fpkginst(NULL); /* force closing/rewind of files */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland incompat(abbrev, info.name, a_preinstallCheck);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland deponme(abbrev, info.name, a_preinstallCheck);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * *****************************************************************************
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * static internal (private) functions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * *****************************************************************************
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandincompat(char *pkginst, char *pkgname, boolean_t a_preinstallCheck)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) fprintf(stdout, "incompat=%s\n", pkginst);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(buf, sizeof (buf), ERR_INCOMP_VERS, pkginst, pkgname);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandprereq(char *pkginst, char *pkgname, boolean_t a_preinstallCheck)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland register int i;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(buf, sizeof (buf), ERR_PRENCI, pkginst,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(buf, sizeof (buf), ERR_PREREQ, pkginst,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (i = 0; i < nlist; i++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlanddeponme(char *pkginst, char *pkgname, boolean_t a_preinstallCheck)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(buf, sizeof (buf), ERR_DEPONME, pkginst);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) snprintf(buf, sizeof (buf), ERR_DEPNAM, pkginst,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland register int i, c, found;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland for (i = 0; i < nlist; i++) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* begin new definition */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* LINTED variable format specifier to sscanf(): */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (void) sscanf(line, SSCANF_FORMAT, &type, abbrev, name);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* architecture is specified */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland continue; /* others don't include me */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland "%s/%s/%s", pkgdir, drp->d_name, DEPEND_FILE);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland ckpreq(fp, drp->d_name, a_preinstallCheck);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandckpreq(FILE *fp, char *dname, boolean_t a_preinstallCheck)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland register int i;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* see if package is installed */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland if (inst = fpkginst(abbrev, alist[i], vlist[i])) {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland } while (++i < nlist);