labelit.c (7c478bd9) labelit.c (0e42dee6)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
23 * Copyright (c) 1999-2000 by Sun Microsystems, Inc.
24 * All rights reserved.
22 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
25 */
26
27#pragma ident "%Z%%M% %I% %E% SMI"
28
29/*
30 * Label a file system volume.
31 */
32

--- 32 unchanged lines hidden (view full) ---

65
66typedef unsigned short unicode_t;
67
68#define FSNAME_STR_LEN (8 + 2)
69#define VOLNAME_STR_LEN 32
70#define INFO_STR_LEN 36
71
72static void usage();
24 */
25
26#pragma ident "%Z%%M% %I% %E% SMI"
27
28/*
29 * Label a file system volume.
30 */
31

--- 32 unchanged lines hidden (view full) ---

64
65typedef unsigned short unicode_t;
66
67#define FSNAME_STR_LEN (8 + 2)
68#define VOLNAME_STR_LEN 32
69#define INFO_STR_LEN 36
70
71static void usage();
73static void label(int32_t, uint32_t);
74static void print_info(struct vds *, char *, int32_t);
75static void label_vds(struct vds *, uint32_t, int32_t);
72static void label(ud_handle_t, uint32_t);
73static void print_info(struct vds *, char *, ud_handle_t);
74static void label_vds(struct vds *, uint32_t, ud_handle_t);
76static int32_t convert_string(int8_t *, int8_t *, int32_t, int32_t, int8_t *);
77static int32_t ud_convert2unicode(int8_t *, int8_t *, int32_t);
78
79
80int8_t *labelit_subopts[] = {
81#define LVINFO1 0x00
82 "lvinfo1",
83#define LVINFO2 0x01
84 "lvinfo2",
85#define LVINFO3 0x02
86 "lvinfo3",
87 NULL};
88
89
90int
91main(int32_t argc, char *argv[])
92{
93 int32_t opt = 0;
75static int32_t convert_string(int8_t *, int8_t *, int32_t, int32_t, int8_t *);
76static int32_t ud_convert2unicode(int8_t *, int8_t *, int32_t);
77
78
79int8_t *labelit_subopts[] = {
80#define LVINFO1 0x00
81 "lvinfo1",
82#define LVINFO2 0x01
83 "lvinfo2",
84#define LVINFO3 0x02
85 "lvinfo3",
86 NULL};
87
88
89int
90main(int32_t argc, char *argv[])
91{
92 int32_t opt = 0;
94 int32_t fd = 0;
95 int32_t flags = 0;
96 int32_t ret = 0;
97 int8_t *options = NULL;
98 int8_t *value = NULL;
99 uint32_t set_flags = 0;
93 int32_t flags = 0;
94 int32_t ret = 0;
95 int8_t *options = NULL;
96 int8_t *value = NULL;
97 uint32_t set_flags = 0;
98 ud_handle_t udh;
100
101 (void) setlocale(LC_ALL, "");
102
103#if !defined(TEXT_DOMAIN)
104#define TEXT_DOMAIN "SYS_TEST"
105#endif
106
107 (void) textdomain(TEXT_DOMAIN);

--- 76 unchanged lines hidden (view full) ---

184 "compressed unicode dstring\n"));
185 set_flags |= SET_FSNAME | SET_VOLNAME;
186 } else {
187 if ((argc - optind) != 1) {
188 usage();
189 }
190 }
191
99
100 (void) setlocale(LC_ALL, "");
101
102#if !defined(TEXT_DOMAIN)
103#define TEXT_DOMAIN "SYS_TEST"
104#endif
105
106 (void) textdomain(TEXT_DOMAIN);

--- 76 unchanged lines hidden (view full) ---

183 "compressed unicode dstring\n"));
184 set_flags |= SET_FSNAME | SET_VOLNAME;
185 } else {
186 if ((argc - optind) != 1) {
187 usage();
188 }
189 }
190
191 if (ud_init(-1, &udh) != 0) {
192 (void) fprintf(stderr,
193 gettext("udfs labelit: cannot initialize ud_lib\n"));
194 exit(1);
195 }
196
192 /*
193 * Open special device
194 */
195 if (set_flags == 0) {
196 flags = O_RDONLY;
197 } else {
198 flags = O_RDWR;
199 }
197 /*
198 * Open special device
199 */
200 if (set_flags == 0) {
201 flags = O_RDONLY;
202 } else {
203 flags = O_RDWR;
204 }
200 if ((fd = ud_open_dev(argv[optind], flags)) < 0) {
205 if (ud_open_dev(udh, argv[optind], flags) != 0) {
201 (void) fprintf(stderr,
202 gettext("udfs labelit: cannot open <%s> errorno <%d>\n"),
203 argv[optind], errno);
204 exit(1);
205 }
206
206 (void) fprintf(stderr,
207 gettext("udfs labelit: cannot open <%s> errorno <%d>\n"),
208 argv[optind], errno);
209 exit(1);
210 }
211
207 if ((ret = ud_fill_udfs_info(fd)) != 0) {
212 if ((ret = ud_fill_udfs_info(udh)) != 0) {
208 goto close_dev;
209 }
210
213 goto close_dev;
214 }
215
211 if ((udfs.flags & VALID_UDFS) == 0) {
216 if ((udh->udfs.flags & VALID_UDFS) == 0) {
212 ret = 1;
213 goto close_dev;
214 }
215
217 ret = 1;
218 goto close_dev;
219 }
220
216 label(fd, set_flags);
221 label(udh, set_flags);
217
218close_dev:
222
223close_dev:
219 ud_close_dev(fd);
224 ud_close_dev(udh);
225 ud_fini(udh);
220
221 return (ret);
222}
223
224static void
225usage()
226{
227 (void) fprintf(stderr, gettext(

--- 4 unchanged lines hidden (view full) ---

232 "[lvinfo2=string],[lvinfo3=string]\n"));
233 (void) fprintf(stderr,
234 gettext("NOTE that all -o suboptions: must"
235 " be separated only by commas.\n"));
236 exit(1);
237}
238
239static void
226
227 return (ret);
228}
229
230static void
231usage()
232{
233 (void) fprintf(stderr, gettext(

--- 4 unchanged lines hidden (view full) ---

238 "[lvinfo2=string],[lvinfo3=string]\n"));
239 (void) fprintf(stderr,
240 gettext("NOTE that all -o suboptions: must"
241 " be separated only by commas.\n"));
242 exit(1);
243}
244
245static void
240label(int32_t fd, uint32_t set_flags)
246label(ud_handle_t udh, uint32_t set_flags)
241{
242 if (set_flags == 0) {
247{
248 if (set_flags == 0) {
243 if (udfs.flags & VALID_MVDS) {
244 print_info(&udfs.mvds, "mvds", fd);
249 if (udh->udfs.flags & VALID_MVDS) {
250 print_info(&udh->udfs.mvds, "mvds", udh);
245 }
251 }
246 if (udfs.flags & VALID_RVDS) {
247 print_info(&udfs.rvds, "rvds", fd);
252 if (udh->udfs.flags & VALID_RVDS) {
253 print_info(&udh->udfs.rvds, "rvds", udh);
248 }
249 return;
250 } else {
251
254 }
255 return;
256 } else {
257
252 if (udfs.flags & VALID_MVDS) {
253 label_vds(&udfs.mvds, set_flags, fd);
258 if (udh->udfs.flags & VALID_MVDS) {
259 label_vds(&udh->udfs.mvds, set_flags, udh);
254 }
260 }
255 if (udfs.flags & VALID_RVDS) {
256 label_vds(&udfs.rvds, set_flags, fd);
261 if (udh->udfs.flags & VALID_RVDS) {
262 label_vds(&udh->udfs.rvds, set_flags, udh);
257 }
258 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
259 (SET_FSNAME | SET_VOLNAME)) &&
263 }
264 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
265 (SET_FSNAME | SET_VOLNAME)) &&
260 (udfs.fsd_len != 0)) {
266 (udh->udfs.fsd_len != 0)) {
261 struct file_set_desc *fsd;
262
267 struct file_set_desc *fsd;
268
263 off = udfs.fsd_loc * udfs.lbsize;
264 if (ud_read_dev(fd, off, buf, udfs.fsd_len) != 0) {
269 off = udh->udfs.fsd_loc * udh->udfs.lbsize;
270 if (ud_read_dev(udh, off, buf,
271 udh->udfs.fsd_len) != 0) {
265 return;
266 }
267
268 /* LINTED */
269 fsd = (struct file_set_desc *)buf;
270
271 set_dstring(fsd->fsd_lvid,
272 volname, sizeof (fsd->fsd_lvid));
273 set_dstring(fsd->fsd_fsi,
274 volname, sizeof (fsd->fsd_fsi));
275
272 return;
273 }
274
275 /* LINTED */
276 fsd = (struct file_set_desc *)buf;
277
278 set_dstring(fsd->fsd_lvid,
279 volname, sizeof (fsd->fsd_lvid));
280 set_dstring(fsd->fsd_fsi,
281 volname, sizeof (fsd->fsd_fsi));
282
276 ud_make_tag(&fsd->fsd_tag, UD_FILE_SET_DESC,
283 ud_make_tag(udh, &fsd->fsd_tag, UD_FILE_SET_DESC,
277 SWAP_32(fsd->fsd_tag.tag_loc),
278 SWAP_16(fsd->fsd_tag.tag_crc_len));
279
284 SWAP_32(fsd->fsd_tag.tag_loc),
285 SWAP_16(fsd->fsd_tag.tag_crc_len));
286
280 (void) ud_write_dev(fd, off, buf, udfs.fsd_len);
287 (void) ud_write_dev(udh, off, buf, udh->udfs.fsd_len);
281 }
282 }
283}
284
285static void
288 }
289 }
290}
291
292static void
286print_info(struct vds *v, char *name, int32_t fd)
293print_info(struct vds *v, char *name, ud_handle_t udh)
287{
288 uint8_t outbuf[BUF_LEN];
289
290 if (v->pvd_len != 0) {
294{
295 uint8_t outbuf[BUF_LEN];
296
297 if (v->pvd_len != 0) {
291 off = v->pvd_loc * udfs.lbsize;
292 if (ud_read_dev(fd, off, buf,
298 off = v->pvd_loc * udh->udfs.lbsize;
299 if (ud_read_dev(udh, off, buf,
293 sizeof (struct pri_vol_desc)) == 0) {
294
295 struct pri_vol_desc *pvd;
296
297 /* LINTED */
298 pvd = (struct pri_vol_desc *)buf;
299
300 bzero(outbuf, BUF_LEN);

--- 12 unchanged lines hidden (view full) ---

313 strlen(pvd->pvd_vol_id));
314 (void) fprintf(stdout,
315 gettext("volume label in %s : %s\n"),
316 name, outbuf);
317 }
318 }
319
320 if (v->iud_len != 0) {
300 sizeof (struct pri_vol_desc)) == 0) {
301
302 struct pri_vol_desc *pvd;
303
304 /* LINTED */
305 pvd = (struct pri_vol_desc *)buf;
306
307 bzero(outbuf, BUF_LEN);

--- 12 unchanged lines hidden (view full) ---

320 strlen(pvd->pvd_vol_id));
321 (void) fprintf(stdout,
322 gettext("volume label in %s : %s\n"),
323 name, outbuf);
324 }
325 }
326
327 if (v->iud_len != 0) {
321 off = v->iud_loc * udfs.lbsize;
322 if (ud_read_dev(fd, off, buf,
328 off = v->iud_loc * udh->udfs.lbsize;
329 if (ud_read_dev(udh, off, buf,
323 sizeof (struct iuvd_desc)) == 0) {
324
325 struct iuvd_desc *iud;
326
327 /* LINTED */
328 iud = (struct iuvd_desc *)buf;
329 bzero(outbuf, BUF_LEN);
330 iud->iuvd_ifo1[35] = '\0';

--- 25 unchanged lines hidden (view full) ---

356 gettext("LVInfo3 in %s : %s\n"),
357 name, outbuf);
358 }
359 }
360}
361
362/* ARGSUSED */
363static void
330 sizeof (struct iuvd_desc)) == 0) {
331
332 struct iuvd_desc *iud;
333
334 /* LINTED */
335 iud = (struct iuvd_desc *)buf;
336 bzero(outbuf, BUF_LEN);
337 iud->iuvd_ifo1[35] = '\0';

--- 25 unchanged lines hidden (view full) ---

363 gettext("LVInfo3 in %s : %s\n"),
364 name, outbuf);
365 }
366 }
367}
368
369/* ARGSUSED */
370static void
364label_vds(struct vds *v, uint32_t set_flags, int32_t fd)
371label_vds(struct vds *v, uint32_t set_flags, ud_handle_t udh)
365{
366
367 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
368 (SET_FSNAME | SET_VOLNAME)) &&
369 (v->pvd_len)) {
370
372{
373
374 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
375 (SET_FSNAME | SET_VOLNAME)) &&
376 (v->pvd_len)) {
377
371 off = v->pvd_loc * udfs.lbsize;
372 if (ud_read_dev(fd, off, buf,
378 off = v->pvd_loc * udh->udfs.lbsize;
379 if (ud_read_dev(udh, off, buf,
373 sizeof (struct pri_vol_desc)) == 0) {
374
375 struct pri_vol_desc *pvd;
376
377 /* LINTED */
378 pvd = (struct pri_vol_desc *)buf;
379 bzero((int8_t *)&pvd->pvd_vsi[9], 119);
380 (void) strncpy((int8_t *)&pvd->pvd_vsi[9],
381 &fsname[1], fsname_len - 1);
382
383 set_dstring(pvd->pvd_vol_id,
384 volname, sizeof (pvd->pvd_vol_id));
385
380 sizeof (struct pri_vol_desc)) == 0) {
381
382 struct pri_vol_desc *pvd;
383
384 /* LINTED */
385 pvd = (struct pri_vol_desc *)buf;
386 bzero((int8_t *)&pvd->pvd_vsi[9], 119);
387 (void) strncpy((int8_t *)&pvd->pvd_vsi[9],
388 &fsname[1], fsname_len - 1);
389
390 set_dstring(pvd->pvd_vol_id,
391 volname, sizeof (pvd->pvd_vol_id));
392
386 ud_make_tag(&pvd->pvd_tag,
393 ud_make_tag(udh, &pvd->pvd_tag,
387 SWAP_16(pvd->pvd_tag.tag_id),
388 SWAP_32(pvd->pvd_tag.tag_loc),
389 SWAP_16(pvd->pvd_tag.tag_crc_len));
390
394 SWAP_16(pvd->pvd_tag.tag_id),
395 SWAP_32(pvd->pvd_tag.tag_loc),
396 SWAP_16(pvd->pvd_tag.tag_crc_len));
397
391 (void) ud_write_dev(fd, off, buf,
398 (void) ud_write_dev(udh, off, buf,
392 sizeof (struct pri_vol_desc));
393 }
394 }
395
396 if (set_flags && v->iud_len) {
397
399 sizeof (struct pri_vol_desc));
400 }
401 }
402
403 if (set_flags && v->iud_len) {
404
398 off = v->iud_loc * udfs.lbsize;
399 if (ud_read_dev(fd, off, buf,
405 off = v->iud_loc * udh->udfs.lbsize;
406 if (ud_read_dev(udh, off, buf,
400 sizeof (struct iuvd_desc)) == 0) {
401
402 struct iuvd_desc *iuvd;
403
404 /* LINTED */
405 iuvd = (struct iuvd_desc *)buf;
406
407 if ((set_flags & SET_VOLNAME) == SET_VOLNAME) {

--- 8 unchanged lines hidden (view full) ---

416 set_dstring(iuvd->iuvd_ifo2,
417 lvinfo2_buf, sizeof (iuvd->iuvd_ifo2));
418 }
419 if ((set_flags & SET_LVINFO3) == SET_LVINFO3) {
420 set_dstring(iuvd->iuvd_ifo3,
421 lvinfo3_buf, sizeof (iuvd->iuvd_ifo3));
422 }
423
407 sizeof (struct iuvd_desc)) == 0) {
408
409 struct iuvd_desc *iuvd;
410
411 /* LINTED */
412 iuvd = (struct iuvd_desc *)buf;
413
414 if ((set_flags & SET_VOLNAME) == SET_VOLNAME) {

--- 8 unchanged lines hidden (view full) ---

423 set_dstring(iuvd->iuvd_ifo2,
424 lvinfo2_buf, sizeof (iuvd->iuvd_ifo2));
425 }
426 if ((set_flags & SET_LVINFO3) == SET_LVINFO3) {
427 set_dstring(iuvd->iuvd_ifo3,
428 lvinfo3_buf, sizeof (iuvd->iuvd_ifo3));
429 }
430
424 ud_make_tag(&iuvd->iuvd_tag,
431 ud_make_tag(udh, &iuvd->iuvd_tag,
425 SWAP_16(iuvd->iuvd_tag.tag_id),
426 SWAP_32(iuvd->iuvd_tag.tag_loc),
427 SWAP_16(iuvd->iuvd_tag.tag_crc_len));
428
432 SWAP_16(iuvd->iuvd_tag.tag_id),
433 SWAP_32(iuvd->iuvd_tag.tag_loc),
434 SWAP_16(iuvd->iuvd_tag.tag_crc_len));
435
429 (void) ud_write_dev(fd, off, buf,
436 (void) ud_write_dev(udh, off, buf,
430 sizeof (struct iuvd_desc));
431 }
432 }
433
434 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
435 (SET_FSNAME | SET_VOLNAME)) &&
436 (v->lvd_len)) {
437
437 sizeof (struct iuvd_desc));
438 }
439 }
440
441 if (((set_flags & (SET_FSNAME | SET_VOLNAME)) ==
442 (SET_FSNAME | SET_VOLNAME)) &&
443 (v->lvd_len)) {
444
438 off = v->lvd_loc * udfs.lbsize;
439 if (ud_read_dev(fd, off, buf,
445 off = v->lvd_loc * udh->udfs.lbsize;
446 if (ud_read_dev(udh, off, buf,
440 sizeof (struct log_vol_desc)) == 0) {
441
442 struct log_vol_desc *lvd;
443
444 /* LINTED */
445 lvd = (struct log_vol_desc *)buf;
446 set_dstring(lvd->lvd_lvid,
447 volname, sizeof (lvd->lvd_lvid));
448
447 sizeof (struct log_vol_desc)) == 0) {
448
449 struct log_vol_desc *lvd;
450
451 /* LINTED */
452 lvd = (struct log_vol_desc *)buf;
453 set_dstring(lvd->lvd_lvid,
454 volname, sizeof (lvd->lvd_lvid));
455
449 ud_make_tag(&lvd->lvd_tag,
456 ud_make_tag(udh, &lvd->lvd_tag,
450 SWAP_16(lvd->lvd_tag.tag_id),
451 SWAP_32(lvd->lvd_tag.tag_loc),
452 SWAP_16(lvd->lvd_tag.tag_crc_len));
453
457 SWAP_16(lvd->lvd_tag.tag_id),
458 SWAP_32(lvd->lvd_tag.tag_loc),
459 SWAP_16(lvd->lvd_tag.tag_crc_len));
460
454 (void) ud_write_dev(fd, off, buf,
461 (void) ud_write_dev(udh, off, buf,
455 sizeof (struct log_vol_desc));
456 }
457 }
458}
459
460
461int32_t
462convert_string(int8_t *value, int8_t *out_buf, int32_t out_len,

--- 43 unchanged lines hidden ---
462 sizeof (struct log_vol_desc));
463 }
464 }
465}
466
467
468int32_t
469convert_string(int8_t *value, int8_t *out_buf, int32_t out_len,

--- 43 unchanged lines hidden ---