Lines Matching defs:buffer
609 * @buffer: Block of data being worked on
618 * Return: -1 Error, the calculated offset exceeded the size of the buffer
619 * n OK, a range-checked offset into buffer
621 static int ldm_relative(const u8 *buffer, int buflen, int base, int offset)
625 if (!buffer || offset < 0 || base > buflen) {
626 if (!buffer)
627 ldm_error("!buffer");
634 if (base + buffer[base] >= buflen) {
635 ldm_error("base (%d) + buffer[base] (%d) >= buflen (%d)", base,
636 buffer[base], buflen);
639 return buffer[base] + offset + 1;
676 * ldm_get_vstr - Read a length-prefixed string into a buffer
678 * @buffer: Location to copy string to
679 * @buflen: Size of the output buffer
683 * these strings into a buffer.
686 * If the buffer is too small, the output will be truncated.
688 * Return: 0, Error and @buffer contents are undefined
692 static int ldm_get_vstr (const u8 *block, u8 *buffer, int buflen)
696 BUG_ON (!block || !buffer);
703 memcpy (buffer, block + 1, length);
704 buffer[length] = 0;
711 * @buffer: Block of data being worked on
720 static bool ldm_parse_cmp3 (const u8 *buffer, int buflen, struct vblk *vb)
725 BUG_ON (!buffer || !vb);
727 r_objid = ldm_relative (buffer, buflen, 0x18, 0);
728 r_name = ldm_relative (buffer, buflen, 0x18, r_objid);
729 r_vstate = ldm_relative (buffer, buflen, 0x18, r_name);
730 r_child = ldm_relative (buffer, buflen, 0x1D, r_vstate);
731 r_parent = ldm_relative (buffer, buflen, 0x2D, r_child);
733 if (buffer[0x12] & VBLK_FLAG_COMP_STRIPE) {
734 r_stripe = ldm_relative (buffer, buflen, 0x2E, r_parent);
735 r_cols = ldm_relative (buffer, buflen, 0x2E, r_stripe);
746 if (len != get_unaligned_be32(buffer + 0x14))
750 ldm_get_vstr (buffer + 0x18 + r_name, comp->state,
752 comp->type = buffer[0x18 + r_vstate];
753 comp->children = ldm_get_vnum (buffer + 0x1D + r_vstate);
754 comp->parent_id = ldm_get_vnum (buffer + 0x2D + r_child);
755 comp->chunksize = r_stripe ? ldm_get_vnum (buffer+r_parent+0x2E) : 0;
762 * @buffer: Block of data being worked on
771 static int ldm_parse_dgr3 (const u8 *buffer, int buflen, struct vblk *vb)
776 BUG_ON (!buffer || !vb);
778 r_objid = ldm_relative (buffer, buflen, 0x18, 0);
779 r_name = ldm_relative (buffer, buflen, 0x18, r_objid);
780 r_diskid = ldm_relative (buffer, buflen, 0x18, r_name);
782 if (buffer[0x12] & VBLK_FLAG_DGR3_IDS) {
783 r_id1 = ldm_relative (buffer, buflen, 0x24, r_diskid);
784 r_id2 = ldm_relative (buffer, buflen, 0x24, r_id1);
795 if (len != get_unaligned_be32(buffer + 0x14))
799 ldm_get_vstr (buffer + 0x18 + r_name, dgrp->disk_id,
806 * @buffer: Block of data being worked on
815 static bool ldm_parse_dgr4 (const u8 *buffer, int buflen, struct vblk *vb)
820 BUG_ON (!buffer || !vb);
822 r_objid = ldm_relative (buffer, buflen, 0x18, 0);
823 r_name = ldm_relative (buffer, buflen, 0x18, r_objid);
825 if (buffer[0x12] & VBLK_FLAG_DGR4_IDS) {
826 r_id1 = ldm_relative (buffer, buflen, 0x44, r_name);
827 r_id2 = ldm_relative (buffer, buflen, 0x44, r_id1);
838 if (len != get_unaligned_be32(buffer + 0x14))
841 ldm_get_vstr (buffer + 0x18 + r_objid, buf, sizeof (buf));
847 * @buffer: Block of data being worked on
856 static bool ldm_parse_dsk3 (const u8 *buffer, int buflen, struct vblk *vb)
861 BUG_ON (!buffer || !vb);
863 r_objid = ldm_relative (buffer, buflen, 0x18, 0);
864 r_name = ldm_relative (buffer, buflen, 0x18, r_objid);
865 r_diskid = ldm_relative (buffer, buflen, 0x18, r_name);
866 r_altname = ldm_relative (buffer, buflen, 0x18, r_diskid);
872 if (len != get_unaligned_be32(buffer + 0x14))
876 ldm_get_vstr (buffer + 0x18 + r_diskid, disk->alt_name,
878 if (uuid_parse(buffer + 0x19 + r_name, &disk->disk_id))
886 * @buffer: Block of data being worked on
895 static bool ldm_parse_dsk4 (const u8 *buffer, int buflen, struct vblk *vb)
900 BUG_ON (!buffer || !vb);
902 r_objid = ldm_relative (buffer, buflen, 0x18, 0);
903 r_name = ldm_relative (buffer, buflen, 0x18, r_objid);
909 if (len != get_unaligned_be32(buffer + 0x14))
913 import_uuid(&disk->disk_id, buffer + 0x18 + r_name);
919 * @buffer: Block of data being worked on
928 static bool ldm_parse_prt3(const u8 *buffer, int buflen, struct vblk *vb)
933 BUG_ON(!buffer || !vb);
934 r_objid = ldm_relative(buffer, buflen, 0x18, 0);
939 r_name = ldm_relative(buffer, buflen, 0x18, r_objid);
944 r_size = ldm_relative(buffer, buflen, 0x34, r_name);
949 r_parent = ldm_relative(buffer, buflen, 0x34, r_size);
954 r_diskid = ldm_relative(buffer, buflen, 0x34, r_parent);
959 if (buffer[0x12] & VBLK_FLAG_PART_INDEX) {
960 r_index = ldm_relative(buffer, buflen, 0x34, r_diskid);
975 if (len > get_unaligned_be32(buffer + 0x14)) {
976 ldm_error("len %d > BE32(buffer + 0x14) %d", len,
977 get_unaligned_be32(buffer + 0x14));
981 part->start = get_unaligned_be64(buffer + 0x24 + r_name);
982 part->volume_offset = get_unaligned_be64(buffer + 0x2C + r_name);
983 part->size = ldm_get_vnum(buffer + 0x34 + r_name);
984 part->parent_id = ldm_get_vnum(buffer + 0x34 + r_size);
985 part->disk_id = ldm_get_vnum(buffer + 0x34 + r_parent);
987 part->partnum = buffer[0x35 + r_diskid];
995 * @buffer: Block of data being worked on
1004 static bool ldm_parse_vol5(const u8 *buffer, int buflen, struct vblk *vb)
1010 BUG_ON(!buffer || !vb);
1011 r_objid = ldm_relative(buffer, buflen, 0x18, 0);
1016 r_name = ldm_relative(buffer, buflen, 0x18, r_objid);
1021 r_vtype = ldm_relative(buffer, buflen, 0x18, r_name);
1026 r_disable_drive_letter = ldm_relative(buffer, buflen, 0x18, r_vtype);
1032 r_child = ldm_relative(buffer, buflen, 0x2D, r_disable_drive_letter);
1037 r_size = ldm_relative(buffer, buflen, 0x3D, r_child);
1042 if (buffer[0x12] & VBLK_FLAG_VOLU_ID1) {
1043 r_id1 = ldm_relative(buffer, buflen, 0x52, r_size);
1050 if (buffer[0x12] & VBLK_FLAG_VOLU_ID2) {
1051 r_id2 = ldm_relative(buffer, buflen, 0x52, r_id1);
1058 if (buffer[0x12] & VBLK_FLAG_VOLU_SIZE) {
1059 r_size2 = ldm_relative(buffer, buflen, 0x52, r_id2);
1066 if (buffer[0x12] & VBLK_FLAG_VOLU_DRIVE) {
1067 r_drive = ldm_relative(buffer, buflen, 0x52, r_size2);
1080 if (len > get_unaligned_be32(buffer + 0x14)) {
1081 ldm_error("len %d > BE32(buffer + 0x14) %d", len,
1082 get_unaligned_be32(buffer + 0x14));
1086 ldm_get_vstr(buffer + 0x18 + r_name, volu->volume_type,
1088 memcpy(volu->volume_state, buffer + 0x18 + r_disable_drive_letter,
1090 volu->size = ldm_get_vnum(buffer + 0x3D + r_child);
1091 volu->partition_type = buffer[0x41 + r_size];
1092 memcpy(volu->guid, buffer + 0x42 + r_size, sizeof(volu->guid));
1093 if (buffer[0x12] & VBLK_FLAG_VOLU_DRIVE) {
1094 ldm_get_vstr(buffer + 0x52 + r_size, volu->drive_hint,