Lines Matching refs:lp

67  * sets both lp->log_errno and errno to the specified value.  If the current
72 fmd_log_set_errno(fmd_log_t *lp, int err)
75 lp->log_errno = EFDL_EXACCT + ea_error();
77 lp->log_errno = EFDL_BADTAG;
79 lp->log_errno = err;
81 errno = lp->log_errno;
87 fmd_log_dprintf(fmd_log_t *lp, const char *format, ...)
91 if (lp->log_flags & FMD_LF_DEBUG) {
105 fmd_log_load_record(fmd_log_t *lp, uint_t iflags, fmd_log_record_t *rp)
112 ea_clear(&lp->log_ea);
113 off = lseek64(lp->log_fd, 0, SEEK_CUR);
116 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL)
117 return (fmd_log_set_errno(lp, EFDL_EXACCT));
121 fmd_log_dprintf(lp, "bad catalog tag 0x%x\n", grp->eo_catalog);
123 return (fmd_log_set_errno(lp, EFDL_EXACCT));
138 return (fmd_log_set_errno(lp, err));
159 return (fmd_log_set_errno(lp, EFDL_NOCLASS));
162 if (rp->rec_nrefs != 0 && fmd_log_load_xrefs(lp, iflags, rp) != 0) {
165 return (fmd_log_set_errno(lp, err));
196 fmd_log_load_xref(fmd_log_t *lp, uint_t iflags,
231 return (fmd_log_set_errno(lp, EFDL_BADREF));
234 return (fmd_log_set_errno(lp, EFDL_BADDEV));
243 for (xlp = lp->log_xrefs; xlp != NULL; xlp = xlp->log_xnext) {
255 fmd_log_dprintf(lp, "broken xref dev=%lx ino=%llx\n",
258 fmd_log_dprintf(lp, "broken xref uuid=%s\n", uuid);
276 * we are successful, the files are chained on to lp->log_xrefs, where the
280 fmd_log_load_xrdir(fmd_log_t *lp)
288 lp->log_flags |= FMD_LF_XREFS;
289 (void) strlcpy(dirbuf, lp->log_path, sizeof (dirbuf));
302 if (strcmp(path, lp->log_path) != 0 &&
305 (xlp = fmd_log_open(lp->log_abi, path, NULL)) != NULL) {
306 fmd_log_dprintf(lp, "%s loaded %s for xrefs\n",
307 lp->log_path, xlp->log_path);
308 xlp->log_xnext = lp->log_xrefs;
309 lp->log_xrefs = xlp;
321 fmd_log_load_xrefs(fmd_log_t *lp, uint_t iflags, fmd_log_record_t *rp)
330 if (!(lp->log_flags & FMD_LF_XREFS))
331 fmd_log_load_xrdir(lp);
334 return (fmd_log_set_errno(lp, EFDL_NOMEM));
357 if (fmd_log_load_xref(lp, iflags, rp, obj) != 0)
366 fmd_log_open_err(fmd_log_t *lp, int *errp, int err)
371 if (lp != NULL)
372 fmd_log_close(lp);
381 fmd_log_t *lp;
387 if ((lp = malloc(sizeof (fmd_log_t))) == NULL)
390 bzero(lp, sizeof (fmd_log_t));
392 if ((lp->log_path = strdup(name)) == NULL)
393 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
395 if ((lp->log_fd = open64(name, O_RDONLY)) == -1 ||
396 fstat64(lp->log_fd, &lp->log_stat) == -1 ||
397 (fd = dup(lp->log_fd)) == -1)
398 return (fmd_log_open_err(lp, errp, errno));
400 if (ea_fdopen(&lp->log_ea, fd, FMD_CREATOR,
403 return (fmd_log_open_err(lp, errp, EFDL_EXACCT));
406 lp->log_abi = abi;
407 lp->log_flags |= FMD_LF_EAOPEN;
409 lp->log_flags |= FMD_LF_DEBUG;
416 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL)
417 return (fmd_log_open_err(lp, errp, EFDL_EXACCT));
421 return (fmd_log_open_err(lp, errp, EFDL_EXACCT));
427 lp->log_version = strdup(obj->eo_item.ei_string);
428 if (lp->log_version == NULL) {
430 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
434 lp->log_label = strdup(obj->eo_item.ei_string);
435 if (lp->log_label == NULL) {
437 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
441 lp->log_osrelease = strdup(obj->eo_item.ei_string);
442 if (lp->log_osrelease == NULL) {
444 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
448 lp->log_osversion = strdup(obj->eo_item.ei_string);
449 if (lp->log_osversion == NULL) {
451 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
455 lp->log_platform = strdup(obj->eo_item.ei_string);
456 if (lp->log_platform == NULL) {
458 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
462 lp->log_uuid = strdup(obj->eo_item.ei_string);
463 if (lp->log_uuid == NULL) {
465 return (fmd_log_open_err(lp, errp, EFDL_NOMEM));
473 if (lp->log_version == NULL || lp->log_label == NULL)
474 return (fmd_log_open_err(lp, errp, EFDL_BADHDR));
481 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL)
482 return (fmd_log_open_err(lp, errp, EFDL_EXACCT));
486 return (fmd_log_open_err(lp, errp, EFDL_EXACCT));
490 lp->log_flags |= FMD_LF_START;
492 fmd_log_dprintf(lp, "open log %s dev=%lx ino=%llx\n", lp->log_path,
493 (ulong_t)lp->log_stat.st_dev, (u_longlong_t)lp->log_stat.st_ino);
495 return (lp);
499 fmd_log_close(fmd_log_t *lp)
503 if (lp == NULL)
504 return; /* permit null lp to simply caller code */
506 for (xlp = lp->log_xrefs; xlp != NULL; xlp = nlp) {
511 if (lp->log_flags & FMD_LF_EAOPEN)
512 (void) ea_close(&lp->log_ea);
514 if (lp->log_fd >= 0)
515 (void) close(lp->log_fd);
517 free(lp->log_path);
518 free(lp->log_version);
519 free(lp->log_label);
520 free(lp->log_osrelease);
521 free(lp->log_osversion);
522 free(lp->log_platform);
523 free(lp->log_uuid);
525 free(lp);
529 fmd_log_label(fmd_log_t *lp)
531 return (lp->log_label);
535 fmd_log_header(fmd_log_t *lp, fmd_log_header_t *hp)
537 const char *creator = ea_get_creator(&lp->log_ea);
538 const char *hostname = ea_get_hostname(&lp->log_ea);
542 hp->log_label = lp->log_label ? lp->log_label : "";
543 hp->log_version = lp->log_version ? lp->log_version : "";
544 hp->log_osrelease = lp->log_osrelease ? lp->log_osrelease : "";
545 hp->log_osversion = lp->log_osversion ? lp->log_osversion : "";
546 hp->log_platform = lp->log_platform ? lp->log_platform : "";
547 if (lp->log_abi > 1)
548 hp->log_uuid = lp->log_uuid ? lp->log_uuid : "";
557 fmd_log_rewind(fmd_log_t *lp)
561 if (!(lp->log_flags & FMD_LF_START)) {
562 while (ea_previous_object(&lp->log_ea, &obj) != EO_ERROR)
565 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL)
566 return (fmd_log_set_errno(lp, EFDL_EXACCT));
570 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL)
571 return (fmd_log_set_errno(lp, EFDL_EXACCT));
575 lp->log_flags |= FMD_LF_START;
582 fmd_log_xiter_filter(fmd_log_t *lp, const fmd_log_record_t *rp,
589 if (fav[i].filt_argv[j].filt_func(lp, rp,
602 fmd_log_xiter_filtcmp(const void *lp, const void *rp)
604 return ((intptr_t)((fmd_log_filter_t *)lp)->filt_func -
609 fmd_log_filter(fmd_log_t *lp, uint_t fc, fmd_log_filter_t *fv,
628 return (fmd_log_xiter_filter(lp, rp, fac, fav));
632 fmd_log_xiter(fmd_log_t *lp, uint_t flag, uint_t fc, fmd_log_filter_t *fv,
642 return (fmd_log_set_errno(lp, EINVAL));
654 return (fmd_log_set_errno(lp, EFDL_NOMEM));
665 lp->log_flags &= ~FMD_LF_START;
666 ea_clear(&lp->log_ea);
669 if (fmd_log_load_record(lp, flag, &rec) != 0) {
670 if (lp->log_errno == EFDL_EXACCT + EXR_EOF)
672 rv = efunc ? efunc(lp, private) : -1;
675 if (fc == 0 || fmd_log_xiter_filter(lp, &rec, fac, fav))
676 rv = rfunc(lp, &rec, private);
693 fmd_log_iter(fmd_log_t *lp, fmd_log_rec_f *rfunc, void *private)
695 return (fmd_log_xiter(lp, 0, 0, NULL, rfunc, NULL, private, NULL));
699 fmd_log_seek(fmd_log_t *lp, off64_t off)
701 lp->log_flags &= ~FMD_LF_START;
702 ea_clear(&lp->log_ea);
704 if (lseek64(lp->log_fd, off, SEEK_SET) != off)
705 return (fmd_log_set_errno(lp, errno));
733 fmd_log_errmsg(fmd_log_t *lp, int err)
746 fmd_log_errno(fmd_log_t *lp)
748 return (lp->log_errno);