Module Name:    src
Committed By:   reinoud
Date:           Tue Aug  6 12:47:21 UTC 2013

Modified Files:
        src/usr.sbin/makefs: makefs.8 udf.c

Log Message:
Add minimum UDF version specification to makefs(8) -t udf.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/usr.sbin/makefs/makefs.8
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/makefs/udf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/makefs/makefs.8
diff -u src/usr.sbin/makefs/makefs.8:1.51 src/usr.sbin/makefs/makefs.8:1.52
--- src/usr.sbin/makefs/makefs.8:1.51	Tue Aug  6 12:19:34 2013
+++ src/usr.sbin/makefs/makefs.8	Tue Aug  6 12:47:21 2013
@@ -1,4 +1,4 @@
-.\"	$NetBSD: makefs.8,v 1.51 2013/08/06 12:19:34 reinoud Exp $
+.\"	$NetBSD: makefs.8,v 1.52 2013/08/06 12:47:21 reinoud Exp $
 .\"
 .\" Copyright (c) 2001-2003 Wasabi Systems, Inc.
 .\" All rights reserved.
@@ -424,6 +424,11 @@ the physical volume label with a volumes
 wanted. For strict conformance and interchange, don't set the volumeset label
 manually unless it has an unique hex number in the first 8 character
 positions.
+.It Sy minver
+Set the minimum UDF version to be used. Choose UDF version numbers from 0x102,
+0x150, 0x200, and 0x201. Versions 0x250 and 0x260 are currently not supported
+in
+.Nm .
 .Sh SEE ALSO
 .Xr strsuftoll 3 ,
 .Xr installboot 8 ,

Index: src/usr.sbin/makefs/udf.c
diff -u src/usr.sbin/makefs/udf.c:1.8 src/usr.sbin/makefs/udf.c:1.9
--- src/usr.sbin/makefs/udf.c:1.8	Tue Aug  6 12:19:34 2013
+++ src/usr.sbin/makefs/udf.c	Tue Aug  6 12:47:21 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: udf.c,v 1.8 2013/08/06 12:19:34 reinoud Exp $ */
+/* $NetBSD: udf.c,v 1.9 2013/08/06 12:47:21 reinoud Exp $ */
 
 /*
  * Copyright (c) 2006, 2008, 2013 Reinoud Zandijk
@@ -30,7 +30,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: udf.c,v 1.8 2013/08/06 12:19:34 reinoud Exp $");
+__RCSID("$NetBSD: udf.c,v 1.9 2013/08/06 12:47:21 reinoud Exp $");
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -97,7 +97,7 @@ udf_write_sector(void *sector, uint32_t 
 	ret = pwrite(fd, sector, context.sector_size, wpos);
 	if (ret == -1)
 		return errno;
-	if (ret < context.sector_size)
+	if (ret < (int) context.sector_size)
 		return EIO;
 	return 0;
 }
@@ -272,10 +272,10 @@ udf_update_trackinfo(struct mmc_discinfo
 	{ letter, name, NULL, OPT_STRBUF, 0, 0, desc }
 
 #define OPT_NUM(letter, name, field, min, max, desc) \
-	{ letter, name, &diskStructure->field, \
-	  sizeof(diskStructure->field) == 8 ? OPT_INT64 : \
-	  (sizeof(diskStructure->field) == 4 ? OPT_INT32 : \
-	  (sizeof(diskStructure->field) == 2 ? OPT_INT16 : OPT_INT8)), \
+	{ letter, name, &context.field, \
+	  sizeof(context.field) == 8 ? OPT_INT64 : \
+	  (sizeof(context.field) == 4 ? OPT_INT32 : \
+	  (sizeof(context.field) == 2 ? OPT_INT16 : OPT_INT8)), \
 	  min, max, desc }
 
 #define OPT_BOOL(letter, name, field, desc) \
@@ -291,8 +291,15 @@ udf_prep_opts(fsinfo_t *fsopts)
 		OPT_STR('T', "disctype", "disc type (cdrom,dvdrom,bdrom,"
 			"dvdram,bdre,disk,cdr,dvdr,bdr,cdrw,dvdrw)"),
 		OPT_STR('L', "loglabel", "\"logical volume name\""),
-		OPT_STR('P', "discid",   "[\"volset name\"':']"
-			"\"physical volume name\""),
+		OPT_STR('P', "discid",   "\"[volset name ':']"
+			"physical volume name\""),
+		OPT_NUM('t', "tz", gmtoff, -24, 24, "timezone"),
+		OPT_STR('v', "minver", "minimum UDF version in either "
+			"``0x201'' or ``2.01'' format"),
+#if notyet
+		OPT_STR('V', "maxver", "maximum UDF version in either "
+			"``0x201'' or ``2.01'' format"),
+#endif
 		{ .name = NULL }
 	};
 
@@ -314,7 +321,7 @@ udf_prep_opts(fsinfo_t *fsopts)
 
 	/* minimum and maximum UDF versions we advise */
 	context.min_udf = 0x102;
-	context.max_udf = 0x201;
+	context.max_udf = 0x201;	/* 0x250 and 0x260 are not ready */
 
 	/* use user's time zone as default */
 	(void)time(&now);
@@ -334,6 +341,10 @@ udf_cleanup_opts(fsinfo_t *fsopts)
 }
 
 
+/* ----- included from newfs_udf.c ------ */
+/* ----- */
+
+
 #define CDRSIZE    ((uint64_t)   700*1024*1024)	/* small approx */
 #define CDRWSIZE   ((uint64_t)   576*1024*1024)	/* small approx */
 #define DVDRSIZE   ((uint64_t)  4488*1024*1024)	/* small approx */
@@ -341,7 +352,6 @@ udf_cleanup_opts(fsinfo_t *fsopts)
 #define DVDRWSIZE  ((uint64_t)  4482*1024*1024)	/* small approx */
 #define BDRSIZE    ((uint64_t) 23866*1024*1024)	/* small approx */
 #define BDRESIZE   ((uint64_t) 23098*1024*1024)	/* small approx */
-
 int
 udf_parse_opts(const char *option, fsinfo_t *fsopts)
 {
@@ -423,11 +433,20 @@ udf_parse_opts(const char *option, fsinf
 		if (context.primary_name)
 			free(context.primary_name);
 		if ((strstr(buf, ":"))) {
-			perror("primary name can't have ':' in its name");
+			errx(EINVAL, "primary name can't have ':' in its name");
 			return 0;
 		}
 		context.primary_name = strdup(buf);
 		break;
+	case 'v':
+		context.min_udf = a_udf_version(buf, "min_udf");
+		if (context.min_udf > 0x201) {
+			errx(EINVAL, "maximum supported version is UDF 2.01");
+			return 0;
+		}
+		if (context.min_udf > context.max_udf)
+			context.max_udf = context.min_udf;
+		break;
 	}
 	if (set_sectorsize)
 		fsopts->sectorsize = set_sectorsize;
@@ -1240,6 +1259,7 @@ udf_makefs(const char *image, const char
 {
 	struct udf_stats stats;
 	uint64_t truncate_len;
+	char scrap[255];
 	int error;
 
 	/* determine format */
@@ -1288,6 +1308,18 @@ udf_makefs(const char *image, const char
 	/* update mmc info but now with correct size */
 	udf_emulate_discinfo(fsopts, &mmc_discinfo, mmc_profile);
 
+	printf("Building disc compatible with UDF version %x to %x\n\n",
+		context.min_udf, context.max_udf);
+	(void)snprintb(scrap, sizeof(scrap), FORMAT_FLAGBITS,
+	    (uint64_t) format_flags);
+	printf("UDF properties       %s\n", scrap);
+	printf("Volume set          `%s'\n", context.volset_name);
+	printf("Primary volume      `%s`\n", context.primary_name);
+	printf("Logical volume      `%s`\n", context.logvol_name);
+	if (format_flags & FORMAT_META)
+		printf("Metadata percentage  %d %%\n",
+			(int) (100.0*stats.ndatablocks/stats.nmetadatablocks));
+	printf("\n");
 	udf_do_newfs_prefix();
 
 	/* update context */

Reply via email to