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 2009 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 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28*9781SMoriah.Waterland@Sun.COM /* All Rights Reserved */ 29*9781SMoriah.Waterland@Sun.COM 30*9781SMoriah.Waterland@Sun.COM 31*9781SMoriah.Waterland@Sun.COM 32*9781SMoriah.Waterland@Sun.COM #include <stdio.h> 33*9781SMoriah.Waterland@Sun.COM #include <string.h> 34*9781SMoriah.Waterland@Sun.COM #include <limits.h> 35*9781SMoriah.Waterland@Sun.COM #include <sys/types.h> 36*9781SMoriah.Waterland@Sun.COM #include "pkgstrct.h" 37*9781SMoriah.Waterland@Sun.COM #include "pkglib.h" 38*9781SMoriah.Waterland@Sun.COM 39*9781SMoriah.Waterland@Sun.COM /* 40*9781SMoriah.Waterland@Sun.COM * Name: putcfile 41*9781SMoriah.Waterland@Sun.COM * Description: Write contents file entry to specified FILE 42*9781SMoriah.Waterland@Sun.COM * Arguments: struct cfent a_ept - data for contents file entry 43*9781SMoriah.Waterland@Sun.COM * FILE *a_fp - FP of file to write contents file entry to 44*9781SMoriah.Waterland@Sun.COM * Notes: This is identical to putcvfpfile() but this function takes a 45*9781SMoriah.Waterland@Sun.COM * stdio FILE* file to write to instead of a VFP_T file. It is 46*9781SMoriah.Waterland@Sun.COM * MUCH slower than putcvfpfile(). 47*9781SMoriah.Waterland@Sun.COM */ 48*9781SMoriah.Waterland@Sun.COM 49*9781SMoriah.Waterland@Sun.COM int 50*9781SMoriah.Waterland@Sun.COM putcfile(struct cfent *a_ept, FILE *a_fp) 51*9781SMoriah.Waterland@Sun.COM { 52*9781SMoriah.Waterland@Sun.COM struct pinfo *pinfo; 53*9781SMoriah.Waterland@Sun.COM 54*9781SMoriah.Waterland@Sun.COM if (a_ept->ftype == 'i') { 55*9781SMoriah.Waterland@Sun.COM return (0); /* no ifiles stored in contents DB */ 56*9781SMoriah.Waterland@Sun.COM } 57*9781SMoriah.Waterland@Sun.COM 58*9781SMoriah.Waterland@Sun.COM if (a_ept->path == NULL) { 59*9781SMoriah.Waterland@Sun.COM return (-1); /* no path name - no entry to write */ 60*9781SMoriah.Waterland@Sun.COM } 61*9781SMoriah.Waterland@Sun.COM 62*9781SMoriah.Waterland@Sun.COM if (fputs(a_ept->path, a_fp) == EOF) { 63*9781SMoriah.Waterland@Sun.COM return (-1); 64*9781SMoriah.Waterland@Sun.COM } 65*9781SMoriah.Waterland@Sun.COM 66*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.local) { 67*9781SMoriah.Waterland@Sun.COM if (putc('=', a_fp) == EOF) { 68*9781SMoriah.Waterland@Sun.COM return (-1); 69*9781SMoriah.Waterland@Sun.COM } 70*9781SMoriah.Waterland@Sun.COM if (fputs(a_ept->ainfo.local, a_fp) == EOF) 71*9781SMoriah.Waterland@Sun.COM return (-1); 72*9781SMoriah.Waterland@Sun.COM } 73*9781SMoriah.Waterland@Sun.COM 74*9781SMoriah.Waterland@Sun.COM if (a_ept->volno) { 75*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, " %d", a_ept->volno) < 0) { 76*9781SMoriah.Waterland@Sun.COM return (-1); 77*9781SMoriah.Waterland@Sun.COM } 78*9781SMoriah.Waterland@Sun.COM } 79*9781SMoriah.Waterland@Sun.COM 80*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 81*9781SMoriah.Waterland@Sun.COM return (-1); 82*9781SMoriah.Waterland@Sun.COM } 83*9781SMoriah.Waterland@Sun.COM 84*9781SMoriah.Waterland@Sun.COM if (putc(a_ept->ftype, a_fp) == EOF) { 85*9781SMoriah.Waterland@Sun.COM return (-1); 86*9781SMoriah.Waterland@Sun.COM } 87*9781SMoriah.Waterland@Sun.COM 88*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 89*9781SMoriah.Waterland@Sun.COM return (-1); 90*9781SMoriah.Waterland@Sun.COM } 91*9781SMoriah.Waterland@Sun.COM 92*9781SMoriah.Waterland@Sun.COM if (fputs(a_ept->pkg_class, a_fp) == EOF) { 93*9781SMoriah.Waterland@Sun.COM return (-1); 94*9781SMoriah.Waterland@Sun.COM } 95*9781SMoriah.Waterland@Sun.COM 96*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'c') || (a_ept->ftype == 'b')) { 97*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.major == BADMAJOR) { 98*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 99*9781SMoriah.Waterland@Sun.COM return (-1); 100*9781SMoriah.Waterland@Sun.COM } 101*9781SMoriah.Waterland@Sun.COM 102*9781SMoriah.Waterland@Sun.COM if (putc('?', a_fp) == EOF) { 103*9781SMoriah.Waterland@Sun.COM return (-1); 104*9781SMoriah.Waterland@Sun.COM } 105*9781SMoriah.Waterland@Sun.COM } else { 106*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, " %d", a_ept->ainfo.major) < 0) 107*9781SMoriah.Waterland@Sun.COM return (-1); 108*9781SMoriah.Waterland@Sun.COM } 109*9781SMoriah.Waterland@Sun.COM 110*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.minor == BADMINOR) { 111*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 112*9781SMoriah.Waterland@Sun.COM return (-1); 113*9781SMoriah.Waterland@Sun.COM } 114*9781SMoriah.Waterland@Sun.COM 115*9781SMoriah.Waterland@Sun.COM if (putc('?', a_fp) == EOF) { 116*9781SMoriah.Waterland@Sun.COM return (-1); 117*9781SMoriah.Waterland@Sun.COM } 118*9781SMoriah.Waterland@Sun.COM } else { 119*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, " %d", a_ept->ainfo.minor) < 0) 120*9781SMoriah.Waterland@Sun.COM return (-1); 121*9781SMoriah.Waterland@Sun.COM } 122*9781SMoriah.Waterland@Sun.COM } 123*9781SMoriah.Waterland@Sun.COM 124*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'd') || (a_ept->ftype == 'x') || 125*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'c') || (a_ept->ftype == 'b') || 126*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'p') || (a_ept->ftype == 'f') || 127*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'v') || (a_ept->ftype == 'e')) { 128*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, 129*9781SMoriah.Waterland@Sun.COM ((a_ept->ainfo.mode == BADMODE) ? " ?" : " %04o"), 130*9781SMoriah.Waterland@Sun.COM a_ept->ainfo.mode) < 0) 131*9781SMoriah.Waterland@Sun.COM return (-1); 132*9781SMoriah.Waterland@Sun.COM 133*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 134*9781SMoriah.Waterland@Sun.COM return (-1); 135*9781SMoriah.Waterland@Sun.COM } 136*9781SMoriah.Waterland@Sun.COM 137*9781SMoriah.Waterland@Sun.COM if (fputs(a_ept->ainfo.owner, a_fp) == EOF) { 138*9781SMoriah.Waterland@Sun.COM return (-1); 139*9781SMoriah.Waterland@Sun.COM } 140*9781SMoriah.Waterland@Sun.COM 141*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 142*9781SMoriah.Waterland@Sun.COM return (-1); 143*9781SMoriah.Waterland@Sun.COM } 144*9781SMoriah.Waterland@Sun.COM 145*9781SMoriah.Waterland@Sun.COM if (fputs(a_ept->ainfo.group, a_fp) == EOF) { 146*9781SMoriah.Waterland@Sun.COM return (-1); 147*9781SMoriah.Waterland@Sun.COM } 148*9781SMoriah.Waterland@Sun.COM } 149*9781SMoriah.Waterland@Sun.COM 150*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'f') || (a_ept->ftype == 'v') || 151*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'e')) { 152*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, 153*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.size == BADCONT) ? " ?" : " %llu"), 154*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.size) < 0) 155*9781SMoriah.Waterland@Sun.COM return (-1); 156*9781SMoriah.Waterland@Sun.COM 157*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, 158*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.cksum == BADCONT) ? " ?" : " %ld"), 159*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.cksum) < 0) 160*9781SMoriah.Waterland@Sun.COM return (-1); 161*9781SMoriah.Waterland@Sun.COM 162*9781SMoriah.Waterland@Sun.COM if (fprintf(a_fp, 163*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.modtime == BADCONT) ? " ?" : " %ld"), 164*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.modtime) < 0) 165*9781SMoriah.Waterland@Sun.COM return (-1); 166*9781SMoriah.Waterland@Sun.COM } 167*9781SMoriah.Waterland@Sun.COM 168*9781SMoriah.Waterland@Sun.COM pinfo = a_ept->pinfo; 169*9781SMoriah.Waterland@Sun.COM while (pinfo) { 170*9781SMoriah.Waterland@Sun.COM if (putc(' ', a_fp) == EOF) { 171*9781SMoriah.Waterland@Sun.COM return (-1); 172*9781SMoriah.Waterland@Sun.COM } 173*9781SMoriah.Waterland@Sun.COM 174*9781SMoriah.Waterland@Sun.COM if (pinfo->status) { 175*9781SMoriah.Waterland@Sun.COM if (fputc(pinfo->status, a_fp) == EOF) { 176*9781SMoriah.Waterland@Sun.COM return (-1); 177*9781SMoriah.Waterland@Sun.COM } 178*9781SMoriah.Waterland@Sun.COM } 179*9781SMoriah.Waterland@Sun.COM 180*9781SMoriah.Waterland@Sun.COM if (fputs(pinfo->pkg, a_fp) == EOF) { 181*9781SMoriah.Waterland@Sun.COM return (-1); 182*9781SMoriah.Waterland@Sun.COM } 183*9781SMoriah.Waterland@Sun.COM 184*9781SMoriah.Waterland@Sun.COM if (pinfo->editflag) { 185*9781SMoriah.Waterland@Sun.COM if (putc('\\', a_fp) == EOF) { 186*9781SMoriah.Waterland@Sun.COM return (-1); 187*9781SMoriah.Waterland@Sun.COM } 188*9781SMoriah.Waterland@Sun.COM } 189*9781SMoriah.Waterland@Sun.COM 190*9781SMoriah.Waterland@Sun.COM if (pinfo->aclass[0]) { 191*9781SMoriah.Waterland@Sun.COM if (putc(':', a_fp) == EOF) { 192*9781SMoriah.Waterland@Sun.COM return (-1); 193*9781SMoriah.Waterland@Sun.COM } 194*9781SMoriah.Waterland@Sun.COM if (fputs(pinfo->aclass, a_fp) == EOF) { 195*9781SMoriah.Waterland@Sun.COM return (-1); 196*9781SMoriah.Waterland@Sun.COM } 197*9781SMoriah.Waterland@Sun.COM } 198*9781SMoriah.Waterland@Sun.COM pinfo = pinfo->next; 199*9781SMoriah.Waterland@Sun.COM } 200*9781SMoriah.Waterland@Sun.COM 201*9781SMoriah.Waterland@Sun.COM if (putc('\n', a_fp) == EOF) { 202*9781SMoriah.Waterland@Sun.COM return (-1); 203*9781SMoriah.Waterland@Sun.COM } 204*9781SMoriah.Waterland@Sun.COM return (0); 205*9781SMoriah.Waterland@Sun.COM } 206*9781SMoriah.Waterland@Sun.COM 207*9781SMoriah.Waterland@Sun.COM /* 208*9781SMoriah.Waterland@Sun.COM * Name: putcvfpfile 209*9781SMoriah.Waterland@Sun.COM * Description: Write contents file entry to specified VFP 210*9781SMoriah.Waterland@Sun.COM * Arguments: struct cfent a_ept - data for contents file entry 211*9781SMoriah.Waterland@Sun.COM * VFP_T *a_vfp - VFP of file to write contents file entry to 212*9781SMoriah.Waterland@Sun.COM * Notes: This is identical to putcfile() but this function takes a 213*9781SMoriah.Waterland@Sun.COM * VFP_T file to write to instead of a stdio FILE file. It is 214*9781SMoriah.Waterland@Sun.COM * MUCH faster tha putcfile(). 215*9781SMoriah.Waterland@Sun.COM */ 216*9781SMoriah.Waterland@Sun.COM 217*9781SMoriah.Waterland@Sun.COM int 218*9781SMoriah.Waterland@Sun.COM putcvfpfile(struct cfent *a_ept, VFP_T *a_vfp) 219*9781SMoriah.Waterland@Sun.COM { 220*9781SMoriah.Waterland@Sun.COM struct pinfo *pinfo; 221*9781SMoriah.Waterland@Sun.COM 222*9781SMoriah.Waterland@Sun.COM /* contents file does not maintain any 'i' file entries */ 223*9781SMoriah.Waterland@Sun.COM 224*9781SMoriah.Waterland@Sun.COM if (a_ept->ftype == 'i') { 225*9781SMoriah.Waterland@Sun.COM return (0); 226*9781SMoriah.Waterland@Sun.COM } 227*9781SMoriah.Waterland@Sun.COM 228*9781SMoriah.Waterland@Sun.COM /* cannot create an entry if it has no file name */ 229*9781SMoriah.Waterland@Sun.COM 230*9781SMoriah.Waterland@Sun.COM if (a_ept->path == NULL) { 231*9781SMoriah.Waterland@Sun.COM return (-1); 232*9781SMoriah.Waterland@Sun.COM } 233*9781SMoriah.Waterland@Sun.COM 234*9781SMoriah.Waterland@Sun.COM /* 235*9781SMoriah.Waterland@Sun.COM * Format of contents file line could be one of: 236*9781SMoriah.Waterland@Sun.COM * /file=./dir/file s class SUNWxxx 237*9781SMoriah.Waterland@Sun.COM * /file=../dir/file l class SUNWxxx 238*9781SMoriah.Waterland@Sun.COM * /dir d class mode owner group SUNWxxx SUNWyyy 239*9781SMoriah.Waterland@Sun.COM * /devices/name c class major minor mode owner group SUNWxxx 240*9781SMoriah.Waterland@Sun.COM * /file f class mode owner group size cksum modtime SUNWxxx 241*9781SMoriah.Waterland@Sun.COM * /file x class mode owner group SUNWppro 242*9781SMoriah.Waterland@Sun.COM * /file v class mode owner group size cksum modtime SUNWxxx 243*9781SMoriah.Waterland@Sun.COM * /file e class mode owner group size cksum modtime SUNWxxx 244*9781SMoriah.Waterland@Sun.COM * The package name could be prefixed by one of the following 245*9781SMoriah.Waterland@Sun.COM * status indicators: +-*!%@#~ 246*9781SMoriah.Waterland@Sun.COM */ 247*9781SMoriah.Waterland@Sun.COM 248*9781SMoriah.Waterland@Sun.COM /* 249*9781SMoriah.Waterland@Sun.COM * Adding an entry to the specified VFP. During normal processing the 250*9781SMoriah.Waterland@Sun.COM * contents file is copied to a temporary contents file and entries are 251*9781SMoriah.Waterland@Sun.COM * added as appropriate. When this processing is completed, a decision 252*9781SMoriah.Waterland@Sun.COM * is made on whether or not to overwrite the real contents file with 253*9781SMoriah.Waterland@Sun.COM * the contents of the temporary contents file. If the temporary 254*9781SMoriah.Waterland@Sun.COM * contents file is just a copy of the real contents file then there is 255*9781SMoriah.Waterland@Sun.COM * no need to overwrite the real contents file with the contents of the 256*9781SMoriah.Waterland@Sun.COM * temporary contents file. This decision is made in part on whether 257*9781SMoriah.Waterland@Sun.COM * or not any new or modified entries have been added to the temporary 258*9781SMoriah.Waterland@Sun.COM * contents file. Set the "data is modified" indication associated 259*9781SMoriah.Waterland@Sun.COM * with this VFP so that the real contents file is overwritten when 260*9781SMoriah.Waterland@Sun.COM * processing is done. 261*9781SMoriah.Waterland@Sun.COM */ 262*9781SMoriah.Waterland@Sun.COM 263*9781SMoriah.Waterland@Sun.COM (void) vfpSetModified(a_vfp); 264*9781SMoriah.Waterland@Sun.COM 265*9781SMoriah.Waterland@Sun.COM /* write initial path [all entries] */ 266*9781SMoriah.Waterland@Sun.COM 267*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, a_ept->path); 268*9781SMoriah.Waterland@Sun.COM 269*9781SMoriah.Waterland@Sun.COM /* if link, write out '=' portion */ 270*9781SMoriah.Waterland@Sun.COM 271*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.local) { 272*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, '='); 273*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, a_ept->ainfo.local); 274*9781SMoriah.Waterland@Sun.COM } 275*9781SMoriah.Waterland@Sun.COM 276*9781SMoriah.Waterland@Sun.COM /* if volume, write it out */ 277*9781SMoriah.Waterland@Sun.COM 278*9781SMoriah.Waterland@Sun.COM if (a_ept->volno) { 279*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 280*9781SMoriah.Waterland@Sun.COM vfpPutInteger(a_vfp, a_ept->volno); 281*9781SMoriah.Waterland@Sun.COM } 282*9781SMoriah.Waterland@Sun.COM 283*9781SMoriah.Waterland@Sun.COM /* write out <space><entry type><space>class> */ 284*9781SMoriah.Waterland@Sun.COM 285*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 286*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, a_ept->ftype); 287*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 288*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, a_ept->pkg_class); 289*9781SMoriah.Waterland@Sun.COM 290*9781SMoriah.Waterland@Sun.COM /* if char/block device, write out major/minor numbers */ 291*9781SMoriah.Waterland@Sun.COM 292*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'c') || (a_ept->ftype == 'b')) { 293*9781SMoriah.Waterland@Sun.COM /* major device number */ 294*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.major == BADMAJOR) { 295*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 296*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, '?'); 297*9781SMoriah.Waterland@Sun.COM } else { 298*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 299*9781SMoriah.Waterland@Sun.COM vfpPutInteger(a_vfp, a_ept->ainfo.major); 300*9781SMoriah.Waterland@Sun.COM } 301*9781SMoriah.Waterland@Sun.COM 302*9781SMoriah.Waterland@Sun.COM /* minor device number */ 303*9781SMoriah.Waterland@Sun.COM if (a_ept->ainfo.minor == BADMINOR) { 304*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 305*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, '?'); 306*9781SMoriah.Waterland@Sun.COM } else { 307*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 308*9781SMoriah.Waterland@Sun.COM vfpPutInteger(a_vfp, a_ept->ainfo.minor); 309*9781SMoriah.Waterland@Sun.COM } 310*9781SMoriah.Waterland@Sun.COM } 311*9781SMoriah.Waterland@Sun.COM 312*9781SMoriah.Waterland@Sun.COM /* if dxcbpfve, write out mode, owner, group */ 313*9781SMoriah.Waterland@Sun.COM 314*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'd') || (a_ept->ftype == 'x') || 315*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'c') || (a_ept->ftype == 'b') || 316*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'p') || (a_ept->ftype == 'f') || 317*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'v') || (a_ept->ftype == 'e')) { 318*9781SMoriah.Waterland@Sun.COM 319*9781SMoriah.Waterland@Sun.COM /* mode */ 320*9781SMoriah.Waterland@Sun.COM vfpPutFormat(a_vfp, 321*9781SMoriah.Waterland@Sun.COM ((a_ept->ainfo.mode == BADMODE) ? " ?" : " %04o"), 322*9781SMoriah.Waterland@Sun.COM a_ept->ainfo.mode); 323*9781SMoriah.Waterland@Sun.COM 324*9781SMoriah.Waterland@Sun.COM /* owner */ 325*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 326*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, a_ept->ainfo.owner); 327*9781SMoriah.Waterland@Sun.COM 328*9781SMoriah.Waterland@Sun.COM /* group */ 329*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 330*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, a_ept->ainfo.group); 331*9781SMoriah.Waterland@Sun.COM } 332*9781SMoriah.Waterland@Sun.COM /* if f/v/e, write out size, cksum, modtime */ 333*9781SMoriah.Waterland@Sun.COM 334*9781SMoriah.Waterland@Sun.COM if ((a_ept->ftype == 'f') || (a_ept->ftype == 'v') || 335*9781SMoriah.Waterland@Sun.COM (a_ept->ftype == 'e')) { 336*9781SMoriah.Waterland@Sun.COM /* size */ 337*9781SMoriah.Waterland@Sun.COM vfpPutFormat(a_vfp, 338*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.size == BADCONT) ? " ?" : " %llu"), 339*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.size); 340*9781SMoriah.Waterland@Sun.COM 341*9781SMoriah.Waterland@Sun.COM /* cksum */ 342*9781SMoriah.Waterland@Sun.COM vfpPutFormat(a_vfp, 343*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.cksum == BADCONT) ? " ?" : " %ld"), 344*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.cksum); 345*9781SMoriah.Waterland@Sun.COM 346*9781SMoriah.Waterland@Sun.COM /* modtime */ 347*9781SMoriah.Waterland@Sun.COM vfpPutFormat(a_vfp, 348*9781SMoriah.Waterland@Sun.COM ((a_ept->cinfo.modtime == BADCONT) ? " ?" : " %ld"), 349*9781SMoriah.Waterland@Sun.COM a_ept->cinfo.modtime); 350*9781SMoriah.Waterland@Sun.COM } 351*9781SMoriah.Waterland@Sun.COM 352*9781SMoriah.Waterland@Sun.COM /* write out list of all packages referencing this entry */ 353*9781SMoriah.Waterland@Sun.COM 354*9781SMoriah.Waterland@Sun.COM pinfo = a_ept->pinfo; 355*9781SMoriah.Waterland@Sun.COM while (pinfo) { 356*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ' '); 357*9781SMoriah.Waterland@Sun.COM if (pinfo->status) { 358*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, pinfo->status); 359*9781SMoriah.Waterland@Sun.COM } 360*9781SMoriah.Waterland@Sun.COM 361*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, pinfo->pkg); 362*9781SMoriah.Waterland@Sun.COM 363*9781SMoriah.Waterland@Sun.COM if (pinfo->editflag) { 364*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, '\\'); 365*9781SMoriah.Waterland@Sun.COM } 366*9781SMoriah.Waterland@Sun.COM 367*9781SMoriah.Waterland@Sun.COM if (pinfo->aclass[0]) { 368*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, ':'); 369*9781SMoriah.Waterland@Sun.COM vfpPuts(a_vfp, pinfo->aclass); 370*9781SMoriah.Waterland@Sun.COM } 371*9781SMoriah.Waterland@Sun.COM pinfo = pinfo->next; 372*9781SMoriah.Waterland@Sun.COM } 373*9781SMoriah.Waterland@Sun.COM 374*9781SMoriah.Waterland@Sun.COM vfpPutc(a_vfp, '\n'); 375*9781SMoriah.Waterland@Sun.COM return (0); 376*9781SMoriah.Waterland@Sun.COM } 377