static int puttri( /* convert a triangle */ char *v1, char *v2, char *v3 ) { VNDX v1i, v2i, v3i; RREAL *v1c, *v2c, *v3c; RREAL *v1n, *v2n, *v3n; if (!cvtndx(v1i, v1) || !cvtndx(v2i, v2) || !cvtndx(v3i, v3)) { error(WARNING, "bad vertex reference"); return(0); } if (v1i[1]>=0 && v2i[1]>=0 && v3i[1]>=0) { v1c = vtlist[v1i[1]]; v2c = vtlist[v2i[1]]; v3c = vtlist[v3i[1]]; } else v1c = v2c = v3c = NULL; if (v1i[2]>=0 && v2i[2]>=0 && v3i[2]>=0) { v1n = vnlist[v1i[2]]; v2n = vnlist[v2i[2]]; v3n = vnlist[v3i[2]]; } else v1n = v2n = v3n = NULL; return(cvtri(getmod(), vlist[v1i[0]], vlist[v2i[0]], vlist[v3i[0]], v1n, v2n, v3n, v1c, v2c, v3c) >= 0); }
/* * We need grfconfig() for backwards compatability with the ITE driver. */ void grfconfig(void) { struct hp_device hd; struct modtab *mptr; int noinit; int unit = 0; static int didconfig = 0; if (didconfig) return; for (noinit = 0; mptr = getmod(IODC_TP_FIO, -1, noinit); noinit = 1) { switch (mptr->mt_type.iodc_sv_model) { case SVMOD_FIO_SGC: /* * XXX: The Medusa FDDI card looks just like a GRF. */ if (STI_ID_HI(STI_TYPE_BWGRF, mptr->m_hpa) == STI_ID_FDDI) continue; /* fall into... */ case SVMOD_FIO_GGRF: if (unit == NGRF) { printf("grf%d: can't config (NGRF exceeded)\n", unit); continue; } hd.hp_unit = unit++; hd.hp_addr = (char *)mptr; if (grfprobe(&hd)) grfattach(&hd); break; default: break; } } /* * XXX right now we are called for the first time from cnprobe * before businit() has been called. Hence getmod() will fail * (return 0) and we should try again later. */ if (noinit) didconfig++; }
int ftpparse_mlsx (struct ftpparse *fp, char *x, int ll, int is_mlst) { int i; uint64 size; struct tai mtime; int flagtryretr=0; int flagtrycwd=0; char *id=0; int idlen=0; int mtimetype=FTPPARSE_MTIME_UNKNOWN; int sizetype=FTPPARSE_SIZE_UNKNOWN; int flagbrokenmlsx=0; SETUP(); if (is_mlst) if (ll>1) { ll--; x++; } if (ll<2) /* empty facts, space, one-byte-filename */ return 0; for (i=0; i<ll;i++) { int j=0,k=0; if (x[i]==' ') break; /* end of facts */ while (i+j<ll && x[i+j]!=';' && x[i+j]!=' ' && x[i+j]!='=') j++; if (i+j==ll) return 0; if (x[i+j]==' ') return 0; if (x[i+j]==';') return 0; /* x[i+j] is now '=' */ while (i+j+k<ll && x[i+j+k]!=';' && x[i+j+k]!=' ') k++; if (i+j+k==ll) return 0; /* x[i+j+k] is space or semicolon, so use of getlong is safe */ #define ISFACT(name) (j==sizeof(name)-1 && case_startb(x+i,j,name)) if (ISFACT ("size")) { get_uint64 (x + i + j + 1, k - 1,&size); sizetype=FTPPARSE_SIZE_BINARY; } else if (ISFACT ("modify")) { getmod(&mtime,x + i + j + 1, k - 1); mtimetype = FTPPARSE_MTIME_LOCAL; } else if (ISFACT ("type")) { if (k==5 && case_startb (x + i + j + 1, 4, "file")) flagtryretr = 1; else if (case_startb (x + i + j + 1, 3, "dir")) /* "current" */ flagtrycwd = 1; else if (case_startb (x + i + j + 1, 4, "pdir")) /* "parent" */ flagtrycwd = 1; else if (case_startb (x + i + j + 1, 4, "cdir")) flagtrycwd = 1; else { flagtryretr = 1; flagtrycwd = 1; } } else if (ISFACT ("unique")) { id = x + i + j + 1; idlen = k - 1; } i+=j+k; if (x[i]==' ') { flagbrokenmlsx=1; break; } } if (ll==i) return 0; i++; if (ll==i) return 0; fp->name = x + i; fp->namelen = ll - i; fp->sizetype = sizetype; fp->size=size; fp->mtimetype = mtimetype; fp->mtime=mtime; fp->flagtrycwd=flagtrycwd; fp->flagtryretr=flagtryretr; if (id) { fp->idtype = FTPPARSE_ID_FULL; fp->id=id; fp->idlen=idlen; } fp->flagbrokenmlsx=flagbrokenmlsx; fp->format=FTPPARSE_FORMAT_MLSX; return 1; }