balena-image-fs 7.4.0-build-get-filesystem-label-7529f28d616619575443d6336a68be0a8fa9558c-1 → 7.4.0-build-get-filesystem-label-e101822ba5412f3e4c1b9ee09856b35a55497e75-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file
4
4
  automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
5
5
  This project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
- ## 7.4.0 - 2025-01-18
7
+ ## 7.4.0 - 2025-01-22
8
8
 
9
9
  * Add getLabel() to retrieve filesystem label [Ken Bannister]
10
10
 
package/build/fsLabel.js CHANGED
@@ -64,68 +64,62 @@ async function getFsLabel(disk, partition) {
64
64
  const isMbr = !isGpt;
65
65
  // Use a buffer capable of reading any filesystem metadata. Defer actual
66
66
  // read until select filesystem.
67
- let buf = Buffer.alloc(FS_METADATA_MAXLEN);
68
- let labelOffset = 0;
69
- let maxLength = 0;
67
+ const buf = Buffer.alloc(FS_METADATA_MAXLEN);
68
+ let labelOffset;
69
+ let maxLength;
70
70
  // A filesystem places the label in a certain position in its metadata. So
71
71
  // we must determine the type of filesystem. We first narrow the possibilities
72
72
  // by checking the partition type (MBR) or GUID (GPT) for the containing partition.
73
- // There are two broad categories -- FAT types and Linux native types. Finally
74
- // we confirm the presence of signature bytes within the filesystem metadata.
73
+ // There are two broad categories of filesystem -- FAT types and Linux native
74
+ // types. Finally we confirm the presence of signature bytes within the filesystem
75
+ // metadata.
76
+ // FAT types
75
77
  const mbrFatTypes = [PARTID_FAT32_CHS, PARTID_FAT32_LBA, PARTID_FAT16_LBA];
76
78
  const gptFatTypes = [GUID_EFI_SYSTEM, GUID_MS_BASIC_DATA];
77
- let foundPartType = false;
78
- let foundLabel = false;
79
- if (isMbr && mbrFatTypes.some(ptype => partition.type === ptype)
80
- || isGpt && gptFatTypes.some(ptype => partition.type === ptype)) {
81
- foundPartType = true;
79
+ if (isMbr && mbrFatTypes.includes(partition.type)
80
+ || isGpt && gptFatTypes.includes(partition.type)) {
82
81
  maxLength = FAT_LABEL_MAXLEN;
83
82
  await disk.read(buf, 0, buf.length, partition.offset);
84
83
  // FAT16
85
84
  if (buf.readUInt8(FAT16_MAGIC_OFFSET) === FAT_MAGIC_VALUE) {
86
85
  labelOffset = FAT16_LABEL_OFFSET;
87
- foundLabel = true;
88
86
  // FAT32
89
87
  }
90
88
  else if (buf.readUInt8(FAT32_MAGIC_OFFSET) === FAT_MAGIC_VALUE) {
91
89
  labelOffset = FAT32_LABEL_OFFSET;
92
- foundLabel = true;
93
90
  }
94
91
  }
95
- // Linux filesytem of some kind; execting ext2+
92
+ // Linux filesytem of some kind; expecting ext2+
96
93
  const gptLinuxTypes = [GUID_LINUX_NATIVE, GUID_MS_BASIC_DATA];
97
- if (!foundLabel
98
- && ((isMbr && partition.type === PARTID_LINUX_NATIVE)
99
- || (isGpt && gptLinuxTypes.some(ptype => partition.type === ptype)))) {
100
- foundPartType = true;
94
+ if (labelOffset == null && ((isMbr && partition.type === PARTID_LINUX_NATIVE)
95
+ || (isGpt && gptLinuxTypes.includes(partition.type)))) {
101
96
  maxLength = EXT4_LABEL_MAXLEN;
102
97
  // ext2+; reload buffer within superblock
103
98
  await disk.read(buf, 0, buf.length, partition.offset + EXT4_SUPERBLOCK_OFFSET);
104
99
  if (buf.readUInt16LE(EXT4_MAGIC_OFFSET) === EXT4_MAGIC_VALUE_LE) {
105
100
  labelOffset = EXT4_LABEL_OFFSET;
106
- foundLabel = true;
107
101
  }
108
102
  }
109
103
  // Fail on unexpected partition/filesystem
110
- if (!foundPartType) {
104
+ // If max length for a label not defined, then implicitly we have not even
105
+ // found a partition type.
106
+ if (maxLength == null) {
111
107
  throw new LabelNotFound(partition.index, 'unexpected partition type');
112
108
  }
113
- else if (!foundLabel) {
109
+ if (labelOffset == null) {
114
110
  throw new LabelNotFound(partition.index, 'can\'t read filesystem');
115
111
  }
116
112
  // Exclude trailing /0 bytes to stringify.
117
- let i = 0;
118
- for (; i <= maxLength; i++) {
119
- // If label fills available space, no need to test. We just need i
120
- // to have the expected value for Buffer.toString() call below.
121
- if (i == maxLength) {
122
- break;
123
- }
124
- if (buf.readUInt8(labelOffset + i) == 0) {
113
+ let zeroBytePosition;
114
+ for (let i = 0; i < maxLength; i++) {
115
+ if (buf.readUInt8(labelOffset + i) === 0) {
116
+ zeroBytePosition = i;
125
117
  break;
126
118
  }
127
119
  }
128
- return buf.toString('utf8', labelOffset, labelOffset + i).trim();
120
+ // Didn't find a /0 byte; must be max length.
121
+ zeroBytePosition !== null && zeroBytePosition !== void 0 ? zeroBytePosition : (zeroBytePosition = maxLength);
122
+ return buf.toString('utf8', labelOffset, labelOffset + zeroBytePosition).trim();
129
123
  }
130
124
  exports.getFsLabel = getFsLabel;
131
125
  //# sourceMappingURL=fsLabel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fsLabel.js","sourceRoot":"","sources":["../lib/fsLabel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fsLabel.js","sourceRoot":"","sources":["../lib/fsLabel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "balena-image-fs",
3
- "version": "7.4.0-build-get-filesystem-label-7529f28d616619575443d6336a68be0a8fa9558c-1",
3
+ "version": "7.4.0-build-get-filesystem-label-e101822ba5412f3e4c1b9ee09856b35a55497e75-1",
4
4
  "description": "Image filesystem manipulation utilities",
5
5
  "main": "build/index.js",
6
6
  "homepage": "https://github.com/balena-io-modules/balena-image-fs",
@@ -59,6 +59,6 @@
59
59
  "node": ">=16"
60
60
  },
61
61
  "versionist": {
62
- "publishedAt": "2025-01-18T18:31:06.794Z"
62
+ "publishedAt": "2025-01-22T01:24:43.336Z"
63
63
  }
64
64
  }