1*9781SMoriah.Waterland@Sun.COM /*
2*9781SMoriah.Waterland@Sun.COM * CDDL HEADER START
3*9781SMoriah.Waterland@Sun.COM *
4*9781SMoriah.Waterland@Sun.COM * The contents of this file are subject to the terms of the
5*9781SMoriah.Waterland@Sun.COM * Common Development and Distribution License (the "License").
6*9781SMoriah.Waterland@Sun.COM * You may not use this file except in compliance with the License.
7*9781SMoriah.Waterland@Sun.COM *
8*9781SMoriah.Waterland@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9781SMoriah.Waterland@Sun.COM * or http://www.opensolaris.org/os/licensing.
10*9781SMoriah.Waterland@Sun.COM * See the License for the specific language governing permissions
11*9781SMoriah.Waterland@Sun.COM * and limitations under the License.
12*9781SMoriah.Waterland@Sun.COM *
13*9781SMoriah.Waterland@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
14*9781SMoriah.Waterland@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9781SMoriah.Waterland@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
16*9781SMoriah.Waterland@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
17*9781SMoriah.Waterland@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
18*9781SMoriah.Waterland@Sun.COM *
19*9781SMoriah.Waterland@Sun.COM * CDDL HEADER END
20*9781SMoriah.Waterland@Sun.COM */
21*9781SMoriah.Waterland@Sun.COM
22*9781SMoriah.Waterland@Sun.COM /*
23*9781SMoriah.Waterland@Sun.COM * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24*9781SMoriah.Waterland@Sun.COM * Use is subject to license terms.
25*9781SMoriah.Waterland@Sun.COM */
26*9781SMoriah.Waterland@Sun.COM
27*9781SMoriah.Waterland@Sun.COM
28*9781SMoriah.Waterland@Sun.COM /*
29*9781SMoriah.Waterland@Sun.COM * System includes
30*9781SMoriah.Waterland@Sun.COM */
31*9781SMoriah.Waterland@Sun.COM
32*9781SMoriah.Waterland@Sun.COM #include <stdio.h>
33*9781SMoriah.Waterland@Sun.COM #include <limits.h>
34*9781SMoriah.Waterland@Sun.COM #include <string.h>
35*9781SMoriah.Waterland@Sun.COM #include <stdlib.h>
36*9781SMoriah.Waterland@Sun.COM #include <unistd.h>
37*9781SMoriah.Waterland@Sun.COM #include <errno.h>
38*9781SMoriah.Waterland@Sun.COM #include <sys/types.h>
39*9781SMoriah.Waterland@Sun.COM #include <locale.h>
40*9781SMoriah.Waterland@Sun.COM #include <libintl.h>
41*9781SMoriah.Waterland@Sun.COM #include <assert.h>
42*9781SMoriah.Waterland@Sun.COM
43*9781SMoriah.Waterland@Sun.COM /*
44*9781SMoriah.Waterland@Sun.COM * local pkg command library includes
45*9781SMoriah.Waterland@Sun.COM */
46*9781SMoriah.Waterland@Sun.COM
47*9781SMoriah.Waterland@Sun.COM #include "libinst.h"
48*9781SMoriah.Waterland@Sun.COM #include "messages.h"
49*9781SMoriah.Waterland@Sun.COM
50*9781SMoriah.Waterland@Sun.COM /*
51*9781SMoriah.Waterland@Sun.COM * forward declarations
52*9781SMoriah.Waterland@Sun.COM */
53*9781SMoriah.Waterland@Sun.COM
54*9781SMoriah.Waterland@Sun.COM static int
55*9781SMoriah.Waterland@Sun.COM collectError(int *r_numZones, char **r_zoneNames, char *a_packageName,
56*9781SMoriah.Waterland@Sun.COM depckl_t *a_dck, int a_depIndex, depckErrorRecord_t *a_eir,
57*9781SMoriah.Waterland@Sun.COM int a_errIndex);
58*9781SMoriah.Waterland@Sun.COM
59*9781SMoriah.Waterland@Sun.COM /*
60*9781SMoriah.Waterland@Sun.COM * *****************************************************************************
61*9781SMoriah.Waterland@Sun.COM * global external (public) functions
62*9781SMoriah.Waterland@Sun.COM * *****************************************************************************
63*9781SMoriah.Waterland@Sun.COM */
64*9781SMoriah.Waterland@Sun.COM
65*9781SMoriah.Waterland@Sun.COM int
depchkReportErrors(depckl_t * a_dck)66*9781SMoriah.Waterland@Sun.COM depchkReportErrors(depckl_t *a_dck)
67*9781SMoriah.Waterland@Sun.COM {
68*9781SMoriah.Waterland@Sun.COM char *packageName;
69*9781SMoriah.Waterland@Sun.COM char *zonenames;
70*9781SMoriah.Waterland@Sun.COM char msgbuf[4096];
71*9781SMoriah.Waterland@Sun.COM int err;
72*9781SMoriah.Waterland@Sun.COM int i;
73*9781SMoriah.Waterland@Sun.COM int numzones = 0;
74*9781SMoriah.Waterland@Sun.COM
75*9781SMoriah.Waterland@Sun.COM /* entry assertions */
76*9781SMoriah.Waterland@Sun.COM
77*9781SMoriah.Waterland@Sun.COM assert(a_dck != (depckl_t *)NULL);
78*9781SMoriah.Waterland@Sun.COM
79*9781SMoriah.Waterland@Sun.COM /* entry debugging info */
80*9781SMoriah.Waterland@Sun.COM
81*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_ENTRY);
82*9781SMoriah.Waterland@Sun.COM
83*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
84*9781SMoriah.Waterland@Sun.COM
85*9781SMoriah.Waterland@Sun.COM /* go through dependency table, collect, collapse, report errors */
86*9781SMoriah.Waterland@Sun.COM
87*9781SMoriah.Waterland@Sun.COM for (i = 0; a_dck[i].name != (char *)NULL; i++) {
88*9781SMoriah.Waterland@Sun.COM int j;
89*9781SMoriah.Waterland@Sun.COM depckError_t *erc;
90*9781SMoriah.Waterland@Sun.COM
91*9781SMoriah.Waterland@Sun.COM if (zonenames != (char *)NULL) {
92*9781SMoriah.Waterland@Sun.COM free(zonenames);
93*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
94*9781SMoriah.Waterland@Sun.COM }
95*9781SMoriah.Waterland@Sun.COM
96*9781SMoriah.Waterland@Sun.COM erc = a_dck[i].record;
97*9781SMoriah.Waterland@Sun.COM if (erc->er_numEntries == 0) {
98*9781SMoriah.Waterland@Sun.COM continue;
99*9781SMoriah.Waterland@Sun.COM }
100*9781SMoriah.Waterland@Sun.COM
101*9781SMoriah.Waterland@Sun.COM for (j = 0; j < erc->er_numEntries; j++) {
102*9781SMoriah.Waterland@Sun.COM int k;
103*9781SMoriah.Waterland@Sun.COM depckErrorRecord_t *eir;
104*9781SMoriah.Waterland@Sun.COM
105*9781SMoriah.Waterland@Sun.COM if (zonenames != (char *)NULL) {
106*9781SMoriah.Waterland@Sun.COM free(zonenames);
107*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
108*9781SMoriah.Waterland@Sun.COM }
109*9781SMoriah.Waterland@Sun.COM
110*9781SMoriah.Waterland@Sun.COM eir = &erc->er_theEntries[j];
111*9781SMoriah.Waterland@Sun.COM packageName = eir->ier_packageName;
112*9781SMoriah.Waterland@Sun.COM for (k = 0; k < eir->ier_numZones; k++) {
113*9781SMoriah.Waterland@Sun.COM int err;
114*9781SMoriah.Waterland@Sun.COM
115*9781SMoriah.Waterland@Sun.COM err = collectError(&numzones, &zonenames,
116*9781SMoriah.Waterland@Sun.COM packageName, a_dck, i, eir, k);
117*9781SMoriah.Waterland@Sun.COM if (err != 0) {
118*9781SMoriah.Waterland@Sun.COM if (zonenames != (char *)NULL) {
119*9781SMoriah.Waterland@Sun.COM free(zonenames);
120*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
121*9781SMoriah.Waterland@Sun.COM }
122*9781SMoriah.Waterland@Sun.COM return (err);
123*9781SMoriah.Waterland@Sun.COM }
124*9781SMoriah.Waterland@Sun.COM }
125*9781SMoriah.Waterland@Sun.COM
126*9781SMoriah.Waterland@Sun.COM if (a_dck[i].ignore_values == (char *)NULL) {
127*9781SMoriah.Waterland@Sun.COM continue;
128*9781SMoriah.Waterland@Sun.COM }
129*9781SMoriah.Waterland@Sun.COM
130*9781SMoriah.Waterland@Sun.COM if (a_dck[i].err_msg == (char **)NULL) {
131*9781SMoriah.Waterland@Sun.COM (void) snprintf(msgbuf, sizeof (msgbuf),
132*9781SMoriah.Waterland@Sun.COM ERR_DEPENDENCY_IGNORED, a_dck[i].name,
133*9781SMoriah.Waterland@Sun.COM packageName,
134*9781SMoriah.Waterland@Sun.COM numzones == 1 ? "zone" : "zones",
135*9781SMoriah.Waterland@Sun.COM zonenames ? zonenames : "?");
136*9781SMoriah.Waterland@Sun.COM } else {
137*9781SMoriah.Waterland@Sun.COM /* LINTED variable format specifier to ... */
138*9781SMoriah.Waterland@Sun.COM (void) snprintf(msgbuf, sizeof (msgbuf),
139*9781SMoriah.Waterland@Sun.COM *a_dck[i].err_msg, "package",
140*9781SMoriah.Waterland@Sun.COM packageName,
141*9781SMoriah.Waterland@Sun.COM numzones == 1 ? "zone" : "zones",
142*9781SMoriah.Waterland@Sun.COM zonenames ? zonenames : "??");
143*9781SMoriah.Waterland@Sun.COM }
144*9781SMoriah.Waterland@Sun.COM
145*9781SMoriah.Waterland@Sun.COM if (a_dck[i].depcklFunc != NULL) {
146*9781SMoriah.Waterland@Sun.COM /* call check function */
147*9781SMoriah.Waterland@Sun.COM err = (a_dck[i].depcklFunc)(msgbuf,
148*9781SMoriah.Waterland@Sun.COM packageName);
149*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_REPORT_ERROR,
150*9781SMoriah.Waterland@Sun.COM a_dck[i].ignore_values, err,
151*9781SMoriah.Waterland@Sun.COM packageName, msgbuf);
152*9781SMoriah.Waterland@Sun.COM if (err != 0) {
153*9781SMoriah.Waterland@Sun.COM if (zonenames != (char *)NULL) {
154*9781SMoriah.Waterland@Sun.COM free(zonenames);
155*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
156*9781SMoriah.Waterland@Sun.COM }
157*9781SMoriah.Waterland@Sun.COM return (err);
158*9781SMoriah.Waterland@Sun.COM }
159*9781SMoriah.Waterland@Sun.COM } else {
160*9781SMoriah.Waterland@Sun.COM /* no check function - just report message */
161*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_IGNORE_ERROR,
162*9781SMoriah.Waterland@Sun.COM a_dck[i].ignore_values, packageName,
163*9781SMoriah.Waterland@Sun.COM msgbuf);
164*9781SMoriah.Waterland@Sun.COM ptext(stderr, "\\n%s", msgbuf);
165*9781SMoriah.Waterland@Sun.COM }
166*9781SMoriah.Waterland@Sun.COM }
167*9781SMoriah.Waterland@Sun.COM }
168*9781SMoriah.Waterland@Sun.COM
169*9781SMoriah.Waterland@Sun.COM if (zonenames != (char *)NULL) {
170*9781SMoriah.Waterland@Sun.COM free(zonenames);
171*9781SMoriah.Waterland@Sun.COM zonenames = (char *)NULL;
172*9781SMoriah.Waterland@Sun.COM }
173*9781SMoriah.Waterland@Sun.COM
174*9781SMoriah.Waterland@Sun.COM return (0);
175*9781SMoriah.Waterland@Sun.COM }
176*9781SMoriah.Waterland@Sun.COM
177*9781SMoriah.Waterland@Sun.COM void
depchkRecordError(depckError_t * a_erc,char * a_pkginst,char * a_zoneName,char * a_value)178*9781SMoriah.Waterland@Sun.COM depchkRecordError(depckError_t *a_erc, char *a_pkginst,
179*9781SMoriah.Waterland@Sun.COM char *a_zoneName, char *a_value)
180*9781SMoriah.Waterland@Sun.COM {
181*9781SMoriah.Waterland@Sun.COM depckErrorRecord_t *erc;
182*9781SMoriah.Waterland@Sun.COM int i;
183*9781SMoriah.Waterland@Sun.COM
184*9781SMoriah.Waterland@Sun.COM /*
185*9781SMoriah.Waterland@Sun.COM * create new error record and entry if first entry
186*9781SMoriah.Waterland@Sun.COM * record will look like this:
187*9781SMoriah.Waterland@Sun.COM * err->er_#entry=1
188*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_numZones=1
189*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_packageName=a_pkginst
190*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_zones[0]=a_zoneName
191*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_values[0]=a_value
192*9781SMoriah.Waterland@Sun.COM */
193*9781SMoriah.Waterland@Sun.COM
194*9781SMoriah.Waterland@Sun.COM if (a_erc->er_numEntries == 0) {
195*9781SMoriah.Waterland@Sun.COM depckErrorRecord_t *eir;
196*9781SMoriah.Waterland@Sun.COM
197*9781SMoriah.Waterland@Sun.COM eir = (depckErrorRecord_t *)calloc(1,
198*9781SMoriah.Waterland@Sun.COM sizeof (depckErrorRecord_t));
199*9781SMoriah.Waterland@Sun.COM eir->ier_packageName = strdup(a_pkginst);
200*9781SMoriah.Waterland@Sun.COM eir->ier_numZones = 1;
201*9781SMoriah.Waterland@Sun.COM eir->ier_zones = (char **)calloc(1, sizeof (char **));
202*9781SMoriah.Waterland@Sun.COM (eir->ier_zones)[eir->ier_numZones-1] = strdup(a_zoneName);
203*9781SMoriah.Waterland@Sun.COM eir->ier_values = (char **)calloc(1, sizeof (char *));
204*9781SMoriah.Waterland@Sun.COM (eir->ier_values)[eir->ier_numZones-1] = strdup(a_value);
205*9781SMoriah.Waterland@Sun.COM
206*9781SMoriah.Waterland@Sun.COM a_erc->er_numEntries = 1;
207*9781SMoriah.Waterland@Sun.COM a_erc->er_theEntries = eir;
208*9781SMoriah.Waterland@Sun.COM
209*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_RECORD_ERROR, (long)a_erc, a_pkginst,
210*9781SMoriah.Waterland@Sun.COM a_zoneName, a_value);
211*9781SMoriah.Waterland@Sun.COM
212*9781SMoriah.Waterland@Sun.COM return;
213*9781SMoriah.Waterland@Sun.COM }
214*9781SMoriah.Waterland@Sun.COM
215*9781SMoriah.Waterland@Sun.COM /* see if this package already has an entry if so add zone to list */
216*9781SMoriah.Waterland@Sun.COM
217*9781SMoriah.Waterland@Sun.COM for (i = 0; i < a_erc->er_numEntries; i++) {
218*9781SMoriah.Waterland@Sun.COM erc = &a_erc->er_theEntries[i];
219*9781SMoriah.Waterland@Sun.COM
220*9781SMoriah.Waterland@Sun.COM if (strcmp(erc->ier_packageName, a_pkginst) != 0) {
221*9781SMoriah.Waterland@Sun.COM continue;
222*9781SMoriah.Waterland@Sun.COM }
223*9781SMoriah.Waterland@Sun.COM
224*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_RECORD_ZERROR, (long)a_erc, a_zoneName,
225*9781SMoriah.Waterland@Sun.COM a_value, erc->ier_packageName, erc->ier_numZones,
226*9781SMoriah.Waterland@Sun.COM erc->ier_zones[0]);
227*9781SMoriah.Waterland@Sun.COM
228*9781SMoriah.Waterland@Sun.COM /*
229*9781SMoriah.Waterland@Sun.COM * this package already has an entry - add zone to
230*9781SMoriah.Waterland@Sun.COM * existing package entry the modified records will
231*9781SMoriah.Waterland@Sun.COM * look like this:
232*9781SMoriah.Waterland@Sun.COM * err->er_#entry++;
233*9781SMoriah.Waterland@Sun.COM * err->entry[0]->...
234*9781SMoriah.Waterland@Sun.COM * err->entry[i]->
235*9781SMoriah.Waterland@Sun.COM * -------------->record->
236*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_numZones++;
237*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_packageName=a_pkginst
238*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_zones[0]=...
239*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_zones[...]=...
240*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_zones[ier_numZones-1]=a_zoneName
241*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_values[0]=...
242*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_values[...]=...
243*9781SMoriah.Waterland@Sun.COM * ---------------------->ier_values[ier_numZones-1]=a_value
244*9781SMoriah.Waterland@Sun.COM * err->entry[i+1]->...
245*9781SMoriah.Waterland@Sun.COM */
246*9781SMoriah.Waterland@Sun.COM erc->ier_numZones++;
247*9781SMoriah.Waterland@Sun.COM erc->ier_zones = (char **)realloc(erc->ier_zones,
248*9781SMoriah.Waterland@Sun.COM sizeof (char **)*erc->ier_numZones);
249*9781SMoriah.Waterland@Sun.COM (erc->ier_zones)[erc->ier_numZones-1] = strdup(a_zoneName);
250*9781SMoriah.Waterland@Sun.COM erc->ier_values = (char **)realloc(erc->ier_values,
251*9781SMoriah.Waterland@Sun.COM sizeof (char **)*erc->ier_numZones);
252*9781SMoriah.Waterland@Sun.COM (erc->ier_values)[erc->ier_numZones-1] = strdup(a_value);
253*9781SMoriah.Waterland@Sun.COM return;
254*9781SMoriah.Waterland@Sun.COM }
255*9781SMoriah.Waterland@Sun.COM
256*9781SMoriah.Waterland@Sun.COM /*
257*9781SMoriah.Waterland@Sun.COM * this packages does not have an entry - add new package
258*9781SMoriah.Waterland@Sun.COM * entry for this zone the modified records will look like this:
259*9781SMoriah.Waterland@Sun.COM * err->er_#entry++;
260*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_numZones=...
261*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_packageName=...
262*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_zones[0]=...
263*9781SMoriah.Waterland@Sun.COM * err->entry[0]->record->ier_values[0]=...
264*9781SMoriah.Waterland@Sun.COM * err->entry[er_#entry-1]->record->ier_numZones=1
265*9781SMoriah.Waterland@Sun.COM * err->entry[er_#entry-1]->record->ier_packageName=a_pkginst
266*9781SMoriah.Waterland@Sun.COM * err->entry[er_#entry-1]->record->ier_zones[0]=a_zoneName
267*9781SMoriah.Waterland@Sun.COM * err->entry[er_#entry-1]->record->ier_values[0]=a_value
268*9781SMoriah.Waterland@Sun.COM */
269*9781SMoriah.Waterland@Sun.COM
270*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_RECORD_PERROR, (long)a_erc,
271*9781SMoriah.Waterland@Sun.COM a_erc->er_numEntries, a_pkginst, a_zoneName, a_value);
272*9781SMoriah.Waterland@Sun.COM
273*9781SMoriah.Waterland@Sun.COM a_erc->er_numEntries++;
274*9781SMoriah.Waterland@Sun.COM
275*9781SMoriah.Waterland@Sun.COM a_erc->er_theEntries = realloc(a_erc->er_theEntries,
276*9781SMoriah.Waterland@Sun.COM sizeof (depckErrorRecord_t)*a_erc->er_numEntries);
277*9781SMoriah.Waterland@Sun.COM
278*9781SMoriah.Waterland@Sun.COM erc = &a_erc->er_theEntries[a_erc->er_numEntries-1];
279*9781SMoriah.Waterland@Sun.COM
280*9781SMoriah.Waterland@Sun.COM erc->ier_packageName = strdup(a_pkginst);
281*9781SMoriah.Waterland@Sun.COM erc->ier_numZones = 1;
282*9781SMoriah.Waterland@Sun.COM erc->ier_zones = (char **)calloc(1, sizeof (char *));
283*9781SMoriah.Waterland@Sun.COM (erc->ier_zones)[erc->ier_numZones-1] = strdup(a_zoneName);
284*9781SMoriah.Waterland@Sun.COM erc->ier_values = (char **)calloc(1, sizeof (char *));
285*9781SMoriah.Waterland@Sun.COM (erc->ier_values)[erc->ier_numZones-1] = strdup(a_value);
286*9781SMoriah.Waterland@Sun.COM }
287*9781SMoriah.Waterland@Sun.COM
288*9781SMoriah.Waterland@Sun.COM /*
289*9781SMoriah.Waterland@Sun.COM * *****************************************************************************
290*9781SMoriah.Waterland@Sun.COM * static internal (private) functions
291*9781SMoriah.Waterland@Sun.COM * *****************************************************************************
292*9781SMoriah.Waterland@Sun.COM */
293*9781SMoriah.Waterland@Sun.COM
294*9781SMoriah.Waterland@Sun.COM static int
collectError(int * r_numZones,char ** r_zoneNames,char * a_packageName,depckl_t * a_dck,int a_depIndex,depckErrorRecord_t * a_eir,int a_errIndex)295*9781SMoriah.Waterland@Sun.COM collectError(int *r_numZones, char **r_zoneNames, char *a_packageName,
296*9781SMoriah.Waterland@Sun.COM depckl_t *a_dck, int a_depIndex, depckErrorRecord_t *a_eir,
297*9781SMoriah.Waterland@Sun.COM int a_errIndex)
298*9781SMoriah.Waterland@Sun.COM {
299*9781SMoriah.Waterland@Sun.COM char msgbuf[4096];
300*9781SMoriah.Waterland@Sun.COM char *zn = *r_zoneNames;
301*9781SMoriah.Waterland@Sun.COM
302*9781SMoriah.Waterland@Sun.COM if (a_dck[a_depIndex].ignore_values == (char *)NULL) {
303*9781SMoriah.Waterland@Sun.COM if (a_dck[a_depIndex].err_msg == (char **)NULL) {
304*9781SMoriah.Waterland@Sun.COM (void) snprintf(msgbuf, sizeof (msgbuf),
305*9781SMoriah.Waterland@Sun.COM ERR_DEPENDENCY_REPORT, a_eir->ier_values[a_errIndex],
306*9781SMoriah.Waterland@Sun.COM "package", a_packageName,
307*9781SMoriah.Waterland@Sun.COM "zone", a_eir->ier_zones[a_errIndex]);
308*9781SMoriah.Waterland@Sun.COM } else {
309*9781SMoriah.Waterland@Sun.COM /* LINTED variable format specifier to snprintf(); */
310*9781SMoriah.Waterland@Sun.COM (void) snprintf(msgbuf, sizeof (msgbuf),
311*9781SMoriah.Waterland@Sun.COM *a_dck[a_depIndex].err_msg,
312*9781SMoriah.Waterland@Sun.COM a_eir->ier_values[a_errIndex],
313*9781SMoriah.Waterland@Sun.COM "package", a_packageName,
314*9781SMoriah.Waterland@Sun.COM "zone", a_eir->ier_zones[a_errIndex]);
315*9781SMoriah.Waterland@Sun.COM }
316*9781SMoriah.Waterland@Sun.COM if (a_dck[a_depIndex].depcklFunc != NULL) {
317*9781SMoriah.Waterland@Sun.COM int err;
318*9781SMoriah.Waterland@Sun.COM
319*9781SMoriah.Waterland@Sun.COM err = (a_dck[a_depIndex].depcklFunc)(msgbuf,
320*9781SMoriah.Waterland@Sun.COM a_packageName);
321*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_COLLECT_ERROR, err, a_packageName,
322*9781SMoriah.Waterland@Sun.COM msgbuf);
323*9781SMoriah.Waterland@Sun.COM if (err != 0) {
324*9781SMoriah.Waterland@Sun.COM return (err);
325*9781SMoriah.Waterland@Sun.COM }
326*9781SMoriah.Waterland@Sun.COM } else {
327*9781SMoriah.Waterland@Sun.COM echoDebug(DBG_DEPCHK_COLLECT_IGNORE, a_packageName,
328*9781SMoriah.Waterland@Sun.COM msgbuf);
329*9781SMoriah.Waterland@Sun.COM ptext(stderr, "\\n%s", msgbuf);
330*9781SMoriah.Waterland@Sun.COM }
331*9781SMoriah.Waterland@Sun.COM return (0);
332*9781SMoriah.Waterland@Sun.COM }
333*9781SMoriah.Waterland@Sun.COM
334*9781SMoriah.Waterland@Sun.COM *r_numZones = (*r_numZones)+1;
335*9781SMoriah.Waterland@Sun.COM if (zn == (char *)NULL) {
336*9781SMoriah.Waterland@Sun.COM zn = strdup(a_eir->ier_zones[a_errIndex]);
337*9781SMoriah.Waterland@Sun.COM } else {
338*9781SMoriah.Waterland@Sun.COM char *p;
339*9781SMoriah.Waterland@Sun.COM int len = strlen(zn)+strlen(a_eir->ier_zones[a_errIndex])+3;
340*9781SMoriah.Waterland@Sun.COM p = calloc(1, len);
341*9781SMoriah.Waterland@Sun.COM (void) snprintf(p, len, "%s, %s", zn,
342*9781SMoriah.Waterland@Sun.COM a_eir->ier_zones[a_errIndex]);
343*9781SMoriah.Waterland@Sun.COM free(zn);
344*9781SMoriah.Waterland@Sun.COM zn = p;
345*9781SMoriah.Waterland@Sun.COM
346*9781SMoriah.Waterland@Sun.COM }
347*9781SMoriah.Waterland@Sun.COM *r_zoneNames = zn;
348*9781SMoriah.Waterland@Sun.COM return (0);
349*9781SMoriah.Waterland@Sun.COM }
350