Module Name: src Committed By: tkusumi Date: Wed Jan 1 12:47:19 UTC 2020
Modified Files: src/usr.sbin/fstyp: fstyp.c Log Message: fstyp: Consider '@' syntax in device file path for HAMMER2 though devpath is unsupported in NetBSD atm. taken-from: DragonFlyBSD To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/fstyp/fstyp.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/fstyp/fstyp.c diff -u src/usr.sbin/fstyp/fstyp.c:1.10 src/usr.sbin/fstyp/fstyp.c:1.11 --- src/usr.sbin/fstyp/fstyp.c:1.10 Wed Jan 1 09:17:27 2020 +++ src/usr.sbin/fstyp/fstyp.c Wed Jan 1 12:47:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: fstyp.c,v 1.10 2020/01/01 09:17:27 tkusumi Exp $ */ +/* $NetBSD: fstyp.c,v 1.11 2020/01/01 12:47:19 tkusumi Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -35,8 +35,9 @@ * */ #include <sys/cdefs.h> -__RCSID("$NetBSD: fstyp.c,v 1.10 2020/01/01 09:17:27 tkusumi Exp $"); +__RCSID("$NetBSD: fstyp.c,v 1.11 2020/01/01 12:47:19 tkusumi Exp $"); +#include <sys/param.h> #include <sys/disklabel.h> #include <sys/dkio.h> #include <sys/ioctl.h> @@ -185,7 +186,9 @@ main(int argc, char **argv) int ch, error, i, nbytes; bool ignore_type = false, show_unmountable = false; char label[LABEL_LEN + 1], strvised[LABEL_LEN * 4 + 1]; - char *path; + char fdpath[MAXPATHLEN]; + char *p; + const char *path; const char *name = NULL; FILE *fp; fstyp_function fstyp_f; @@ -233,12 +236,28 @@ main(int argc, char **argv) } } - fp = fopen(path, "r"); - if (fp == NULL) - goto fsvtyp; /* DragonFly */ + /* + * DragonFly: Filesystems may have syntax to decorate path. + * Make a wild guess. + * XXX devpath is unsupported in NetBSD, but at least parse '@' for fp. + */ + strlcpy(fdpath, path, sizeof(fdpath)); + p = strchr(fdpath, '@'); + if (p) + *p = '\0'; + + fp = fopen(fdpath, "r"); + if (fp == NULL) { + if (strcmp(path, fdpath)) + fp = fopen(path, "r"); + if (fp == NULL) + goto fsvtyp; /* DragonFly */ + else + strlcpy(fdpath, path, sizeof(fdpath)); + } if (ignore_type == false) - type_check(path, fp); + type_check(fdpath, fp); memset(label, '\0', sizeof(label));