Lines Matching refs:scan
216 Dllscan_t* scan; in dllsopen() local
241 if (!(scan = vmnewof(vm, 0, Dllscan_t, 1, i)) || !(scan->tmp = sfstropen())) in dllsopen()
246 scan->vm = vm; in dllsopen()
248 scan->flags = info->flags; in dllsopen()
251 scan->lib = (char**)(scan + 1); in dllsopen()
252 s = *scan->lib = (char*)(scan->lib + 2); in dllsopen()
260 scan->flags |= DLL_MATCH_NAME; in dllsopen()
264 if (!(scan->pb = vmnewof(vm, 0, char, t - (char*)name, 2))) in dllsopen()
266 memcpy(scan->pb, name, t - (char*)name); in dllsopen()
274 scan->flags |= DLL_MATCH_VERSION; in dllsopen()
284 scan->flags |= DLL_MATCH_VERSION; in dllsopen()
285 sfsprintf(scan->nam, sizeof(scan->nam), "%s%s%s", info->prefix, name, info->suffix); in dllsopen()
287 else if (scan->flags & DLL_INFO_PREVER) in dllsopen()
289 sfprintf(scan->tmp, "%s%s", info->prefix, name); in dllsopen()
292 sfputc(scan->tmp, *s); in dllsopen()
293 sfprintf(scan->tmp, "%s", info->suffix); in dllsopen()
294 if (!(s = sfstruse(scan->tmp))) in dllsopen()
296 sfsprintf(scan->nam, sizeof(scan->nam), "%s", s); in dllsopen()
299 sfsprintf(scan->nam, sizeof(scan->nam), "%s%s%s.%s", info->prefix, name, info->suffix, version); in dllsopen()
300 if (scan->flags & (DLL_MATCH_NAME|DLL_MATCH_VERSION)) in dllsopen()
302 if (scan->flags & DLL_INFO_PREVER) in dllsopen()
315 sfsprintf(scan->pat, sizeof(scan->pat), "%s%s%s%s", info->prefix, name, version, info->suffix); in dllsopen()
318 …sfsprintf(scan->pat, sizeof(scan->pat), "%s%s@(%s([-.])%s%s|%s.%s)", info->prefix, name, strchr(ve… in dllsopen()
322 …sfsprintf(scan->pat, sizeof(scan->pat), "%s%s@(?([-.])%s%s|%s%s)", info->prefix, name, version, in… in dllsopen()
325 scan->sp = scan->sb = (scan->lib ? scan->lib : info->sibling); in dllsopen()
326 scan->prelen = strlen(info->prefix); in dllsopen()
327 scan->suflen = strlen(info->suffix); in dllsopen()
328 return scan; in dllsopen()
330 dllsclose(scan); in dllsopen()
339 dllsclose(Dllscan_t* scan) in dllsclose() argument
341 if (!scan) in dllsclose()
343 if (scan->fts) in dllsclose()
344 fts_close(scan->fts); in dllsclose()
345 if (scan->dict) in dllsclose()
346 dtclose(scan->dict); in dllsclose()
347 if (scan->tmp) in dllsclose()
348 sfclose(scan->tmp); in dllsclose()
349 if (scan->vm) in dllsclose()
350 vmclose(scan->vm); in dllsclose()
359 dllsread(register Dllscan_t* scan) in dllsread() argument
368 if (scan->flags & DLL_MATCH_DONE) in dllsread()
373 while (!scan->ent || !(scan->ent = scan->ent->fts_link)) in dllsread()
375 if (scan->fts) in dllsread()
377 fts_close(scan->fts); in dllsread()
378 scan->fts = 0; in dllsread()
380 if (!scan->pb) in dllsread()
381 scan->pb = pathbin(); in dllsread()
382 else if (!*scan->sp) in dllsread()
384 scan->sp = scan->sb; in dllsread()
385 if (!*scan->pe++) in dllsread()
387 scan->pb = scan->pe; in dllsread()
389 for (p = scan->pp = scan->pb; *p && *p != ':'; p++) in dllsread()
391 scan->pp = p; in dllsread()
392 scan->pe = p; in dllsread()
393 if (*scan->sp == bin) in dllsread()
394 scan->off = sfprintf(scan->tmp, "%-.*s", scan->pe - scan->pb, scan->pb); in dllsread()
396 scan->off = sfprintf(scan->tmp, "%-.*s/%s", scan->pp - scan->pb, scan->pb, *scan->sp); in dllsread()
397 scan->sp++; in dllsread()
398 if (!(scan->flags & DLL_MATCH_NAME)) in dllsread()
400 sfprintf(scan->tmp, "/%s", scan->nam); in dllsread()
401 if (!(p = sfstruse(scan->tmp))) in dllsread()
405 b = scan->nam; in dllsread()
411 if (scan->flags & (DLL_MATCH_NAME|DLL_MATCH_VERSION)) in dllsread()
413 sfstrseek(scan->tmp, scan->off, SEEK_SET); in dllsread()
414 if (!(t = sfstruse(scan->tmp))) in dllsread()
416 …scan->fts = fts_open((char**)t, FTS_LOGICAL|FTS_NOPOSTORDER|FTS_ONEPATH, vercmp)) && (scan->ent = … in dllsread()
420 } while (!strmatch(scan->ent->fts_name, scan->pat)); in dllsread()
421 b = scan->ent->fts_name; in dllsread()
422 sfstrseek(scan->tmp, scan->off, SEEK_SET); in dllsread()
423 sfprintf(scan->tmp, "/%s", b); in dllsread()
424 if (!(p = sfstruse(scan->tmp))) in dllsread()
427 b = scan->buf + sfsprintf(scan->buf, sizeof(scan->buf), "%s", b + scan->prelen); in dllsread()
428 if (!(scan->flags & DLL_INFO_PREVER)) in dllsread()
429 while (b > scan->buf) in dllsread()
435 b -= scan->suflen; in dllsread()
436 if (b > (scan->buf + 2) && (*(b - 1) == 'g' || *(b - 1) == 'O') && *(b - 2) == '-') in dllsread()
439 for (t = b; t > scan->buf; t--) in dllsread()
472 if (m || (scan->flags & DLL_INFO_PREVER)) in dllsread()
476 if (!*(b = scan->buf)) in dllsread()
478 if (scan->uniq) in dllsread()
480 if (!scan->dict) in dllsread()
482 scan->disc.key = offsetof(Uniq_t, name); in dllsread()
483 scan->disc.size = 0; in dllsread()
484 scan->disc.link = offsetof(Uniq_t, link); in dllsread()
485 if (!(scan->dict = dtopen(&scan->disc, Dthash))) in dllsread()
487 dtinsert(scan->dict, scan->uniq); in dllsread()
489 if (dtmatch(scan->dict, b)) in dllsread()
491 if (!(u = vmnewof(scan->vm, 0, Uniq_t, 1, strlen(b)))) in dllsread()
494 dtinsert(scan->dict, u); in dllsread()
496 else if (!(scan->flags & DLL_MATCH_NAME)) in dllsread()
497 scan->flags |= DLL_MATCH_DONE; in dllsread()
498 else if (!(scan->uniq = vmnewof(scan->vm, 0, Uniq_t, 1, strlen(b)))) in dllsread()
501 strcpy(scan->uniq->name, b); in dllsread()
502 scan->entry.name = b; in dllsread()
503 scan->entry.path = p; in dllsread()
504 return &scan->entry; in dllsread()