Lines Matching defs:pc

44 void BC_free_playlist(struct BC_playlist *pc) {
45 if (pc) {
46 if (pc->p_mounts)
47 free(pc->p_mounts);
48 if (pc->p_entries)
49 free(pc->p_entries);
50 free(pc);
70 struct BC_playlist *pc;
75 pc = NULL;
100 if ((pc = calloc(1, sizeof(*pc))) == NULL) {
106 pc->p_nmounts = ph.ph_nmounts;
107 pc->p_nentries = ph.ph_nentries;
109 if ((pc->p_mounts = malloc(sizeof(*pc->p_mounts) * pc->p_nmounts)) == NULL) {
114 if (read(fd, pc->p_mounts, sizeof(*pc->p_mounts) * pc->p_nmounts) != (sizeof(*pc->p_mounts) * pc->p_nmounts)) {
120 if ((pc->p_entries = malloc(sizeof(*pc->p_entries) * pc->p_nentries)) == NULL) {
125 if (read(fd, pc->p_entries, (sizeof(*pc->p_entries) * pc->p_nentries)) != (sizeof(*pc->p_entries) * pc->p_nentries)) {
131 if ((error = BC_verify_playlist(pc)) != 0) {
135 *ppc = pc;
140 PC_FREE_ZERO(pc);
149 BC_write_playlist(const char *pfname, const struct BC_playlist *pc)
158 if ((error = BC_verify_playlist(pc)) != 0) {
196 if (write(fd, pc->p_mounts, pc->p_nmounts * sizeof(*pc->p_mounts)) != (pc->p_nmounts * sizeof(*pc->p_mounts))) {
205 if (write(fd, pc->p_entries, pc->p_nentries * sizeof(*pc->p_entries)) != (pc->p_nentries * sizeof(*pc->p_entries))) {
215 ph.ph_nmounts = pc->p_nmounts;
216 ph.ph_nentries = pc->p_nentries;
335 BC_sort_playlist(struct BC_playlist *pc)
337 if ((pc == NULL) || (pc->p_mounts == NULL) || (pc->p_entries == NULL) || (pc->p_nmounts == 0) || (pc->p_nentries == 0))
340 if (pc->p_nentries > 0)
341 qsort((void *)pc->p_entries, pc->p_nentries, sizeof(*pc->p_entries), compare_playlist_entry);
349 BC_coalesce_playlist(struct BC_playlist *pc)
357 pe = pc->p_entries;
362 for (mount_idx = 0; mount_idx < pc->p_nmounts; mount_idx++)
363 pc->p_mounts[mount_idx].pm_nentries = 0;
365 while (pe < pc->p_entries + pc->p_nentries) {
370 for (i = 1; (pe + i) < (pc->p_entries + pc->p_nentries); i++) {
427 pc->p_mounts[pe->pe_mount_idx].pm_nentries++;
437 pc->p_nentries = oentries;
438 pe = pc->p_entries;
439 pc->p_entries = realloc(pc->p_entries, sizeof(*pc->p_entries) * pc->p_nentries);
440 if (pc->p_entries == NULL)
441 pc->p_entries = pe;
451 BC_verify_playlist(const struct BC_playlist *pc)
456 if (pc == NULL) {
461 if ((pc->p_mounts == NULL) && (pc->p_nmounts > 0)) {
466 if ((pc->p_entries == NULL) && (pc->p_nentries > 0)) {
471 if (pc->p_nentries > 0 && pc->p_nmounts == 0) {
478 if (pc->p_nmounts == 0) {
483 mount_counts = calloc(pc->p_nmounts, sizeof(int));
485 for (i = 0; i < pc->p_nentries; i++) {
486 if (pc->p_entries[i].pe_mount_idx >= pc->p_nmounts) {
487 warnx("entry %d referenced unknown mount %d", i, pc->p_entries[i].pe_mount_idx);
491 mount_counts[pc->p_entries[i].pe_mount_idx]++;
493 if (pc->p_entries[i].pe_offset + pc->p_entries[i].pe_length <= pc->p_entries[i].pe_offset) {
494 warnx("entry %d has a bad range %lld,%lld", i, pc->p_entries[i].pe_offset, pc->p_entries[i].pe_length);
501 for (i = 0; i < pc->p_nmounts; i++) {
502 if (pc->p_mounts[i].pm_nentries == 0) {
507 if (mount_counts[i] != pc->p_mounts[i].pm_nentries) {
508 warnx("%d entries exist for mount %d, vs %d claimed", mount_counts[i], i, pc->p_mounts[i].pm_nentries);
556 struct BC_playlist *pc;
570 if ((pc = calloc(1, sizeof(*pc))) == NULL) {
576 if ((pc->p_mounts = malloc(sizeof(*pc->p_mounts) * hc->h_nmounts)) == NULL) {
580 pc->p_nmounts = 0;
583 pm = pc->p_mounts + pc->p_nmounts;
586 pc->p_nmounts++;
591 if ((pc->p_entries = malloc(sizeof(*pc->p_entries) * hc->h_nentries)) == NULL) {
597 pc->p_nentries = 0;
622 pe = pc->p_entries + pc->p_nentries;
625 for (mount_idx = 0; mount_idx < pc->p_nmounts; mount_idx++) {
626 if (0 == uuid_compare(pc->p_mounts[mount_idx].pm_uuid, hm->hm_uuid)) {
630 if (mount_idx >= pc->p_nmounts) {
635 pm = pc->p_mounts + mount_idx;
650 pc->p_nentries++;
654 for (mount_idx = 0; mount_idx < pc->p_nmounts; mount_idx++) {
655 pm = pc->p_mounts + mount_idx;
657 pc->p_nmounts--;
658 if (mount_idx < pc->p_nmounts) {
659 memcpy(pm, pm + 1, sizeof(*pm) * (pc->p_nmounts - mount_idx));
660 for (pe = pc->p_entries; pe < (pc->p_entries + pc->p_nentries); pe++)
668 if ((error = BC_verify_playlist(pc)) != 0) {
672 *ppc = pc;
676 PC_FREE_ZERO(pc);
685 BC_start(struct BC_playlist *pc)
691 if (pc) {
692 bc.bc_data1 = (uintptr_t) pc->p_mounts;
693 bc.bc_data1_size = (unsigned int) (pc->p_nmounts * sizeof(*pc->p_mounts));
694 bc.bc_data2 = (uintptr_t) pc->p_entries;
695 bc.bc_data2_size = (unsigned int) (pc->p_nentries * sizeof(*pc->p_entries));
796 struct BC_playlist* pc = NULL;
877 pc = calloc(1, sizeof(*pc));
878 if(!pc) {
883 pc->p_nmounts = 1;
884 pc->p_mounts = malloc(sizeof(*pc->p_mounts));
885 if(!pc->p_mounts) {
887 PC_FREE_ZERO(pc);
891 pc->p_mounts[0].pm_nentries = 0;
892 uuid_copy(pc->p_mounts[0].pm_uuid, attrBuf.uuid);
893 pc->p_nentries = 0;
894 pc->p_entries = NULL;
935 pc->p_entries = reallocf(pc->p_entries, (pc->p_nentries + 1) * sizeof(*pc->p_entries));
936 if(! pc->p_entries) {
941 pc->p_entries[pc->p_nentries].pe_offset = block_range.l2p_devoffset;
942 pc->p_entries[pc->p_nentries].pe_length = block_range.l2p_contigbytes;
943 pc->p_entries[pc->p_nentries].pe_batch = 0;
944 pc->p_entries[pc->p_nentries].pe_flags = 0;
945 pc->p_entries[pc->p_nentries].pe_mount_idx = 0;
946 pc->p_mounts[0].pm_nentries++;
947 pc->p_nentries++;
950 if (pc->p_nentries == 0) {
955 if ((error = BC_verify_playlist(pc)) != 0) {
959 *ppc = pc;
966 PC_FREE_ZERO(pc);