Module Name:    src
Committed By:   christos
Date:           Sat Apr  7 16:44:10 UTC 2012

Modified Files:
        src/sbin/dump: main.c optr.c
        src/sbin/fsck: fsutil.c fsutil.h
        src/sbin/savecore: savecore.c

Log Message:
factor out rawname() from dump, fsck, savecore.


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/sbin/dump/main.c
cvs rdiff -u -r1.37 -r1.38 src/sbin/dump/optr.c
cvs rdiff -u -r1.21 -r1.22 src/sbin/fsck/fsutil.c
cvs rdiff -u -r1.18 -r1.19 src/sbin/fsck/fsutil.h
cvs rdiff -u -r1.84 -r1.85 src/sbin/savecore/savecore.c

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

Modified files:

Index: src/sbin/dump/main.c
diff -u src/sbin/dump/main.c:1.68 src/sbin/dump/main.c:1.69
--- src/sbin/dump/main.c:1.68	Sat Apr  7 00:52:20 2012
+++ src/sbin/dump/main.c	Sat Apr  7 12:44:10 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.68 2012/04/07 04:52:20 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.69 2012/04/07 16:44:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1980, 1991, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19
 #if 0
 static char sccsid[] = "@(#)main.c	8.6 (Berkeley) 5/1/95";
 #else
-__RCSID("$NetBSD: main.c,v 1.68 2012/04/07 04:52:20 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.69 2012/04/07 16:44:10 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -108,7 +108,7 @@ main(int argc, char *argv[])
 	char *mountpoint;
 	int just_estimate = 0;
 	char labelstr[LBLSIZE];
-	char buf[MAXPATHLEN];
+	char buf[MAXPATHLEN], rbuf[MAXPATHLEN];
 	char *new_time_format;
 	char *snap_backup = NULL;
 
@@ -408,11 +408,17 @@ main(int argc, char *argv[])
 	if ((dt = fstabsearch(disk)) != NULL) {
 		if (getfsspecname(buf, sizeof(buf), dt->fs_spec) == NULL)
 			quit("%s (%s)", buf, strerror(errno));
-		disk = rawname(buf);
+		if (getdiskrawname(rbuf, sizeof(rbuf), buf) == NULL)
+			quit("Can't get disk raw name for `%s' (%s)",
+			    buf, strerror(errno));
+		disk = rbuf;
 		mountpoint = dt->fs_file;
 		msg("Found %s on %s in %s\n", disk, mountpoint, _PATH_FSTAB);
 	} else if (mntinfo != NULL) {
-		disk = rawname(mntinfo->f_mntfromname);
+		if (getdiskrawname(rbuf, sizeof(rbuf), mntinfo->f_mntfromname)
+		    == NULL)
+			quit("Can't get disk raw name for `%s' (%s)",
+			    mntinfo->f_mntfromname, strerror(errno));
 		mountpoint = mntinfo->f_mntonname;
 		msg("Found %s on %s in mount table\n", disk, mountpoint);
 	}
@@ -721,20 +727,6 @@ sig(int signo)
 	}
 }
 
-char *
-rawname(char *cp)
-{
-	static char rawbuf[MAXPATHLEN];
-	char *dp = strrchr(cp, '/');
-
-	if (dp == NULL)
-		return (NULL);
-	*dp = '\0';
-	(void)snprintf(rawbuf, sizeof rawbuf, "%s/r%s", cp, dp + 1);
-	*dp = '/';
-	return (rawbuf);
-}
-
 /*
  * obsolete --
  *	Change set of key letters and ordered arguments into something

Index: src/sbin/dump/optr.c
diff -u src/sbin/dump/optr.c:1.37 src/sbin/dump/optr.c:1.38
--- src/sbin/dump/optr.c:1.37	Sat Apr  7 00:52:20 2012
+++ src/sbin/dump/optr.c	Sat Apr  7 12:44:10 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: optr.c,v 1.37 2012/04/07 04:52:20 christos Exp $	*/
+/*	$NetBSD: optr.c,v 1.38 2012/04/07 16:44:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1980, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)optr.c	8.2 (Berkeley) 1/6/94";
 #else
-__RCSID("$NetBSD: optr.c,v 1.37 2012/04/07 04:52:20 christos Exp $");
+__RCSID("$NetBSD: optr.c,v 1.38 2012/04/07 16:44:10 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -391,14 +391,15 @@ fstabsearch(const char *key)
 {
 	struct pfstab *pf;
 	struct fstab *fs;
-	char *rn;
+	const char *rn;
+	char buf[MAXPATHLEN];
 
 	SLIST_FOREACH(pf, &table, pf_list) {
 		fs = pf->pf_fstab;
 		if (strcmp(fs->fs_file, key) == 0 ||
 		    strcmp(fs->fs_spec, key) == 0)
 			return (fs);
-		rn = rawname(fs->fs_spec);
+		rn = getdiskrawname(buf, sizeof(buf), fs->fs_spec);
 		if (rn != NULL && strcmp(rn, key) == 0)
 			return (fs);
 		if (key[0] != '/') {
@@ -427,7 +428,8 @@ mntinfosearch(const char *key)
 {
 	int i, mntbufc;
 	struct statvfs *mntbuf, *fs;
-	char *rn;
+	const char *rn;
+	char buf[MAXPATHLEN];
 
 	if ((mntbufc = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
 		quit("Can't get mount list: %s", strerror(errno));
@@ -443,7 +445,7 @@ mntinfosearch(const char *key)
 		if (strcmp(fs->f_mntonname, key) == 0 ||
 		    strcmp(fs->f_mntfromname, key) == 0)
 			return (fs);
-		rn = rawname(fs->f_mntfromname);
+		rn = getdiskrawname(buf, sizeof(buf), fs->f_mntfromname);
 		if (rn != NULL && strcmp(rn, key) == 0)
 			return (fs);
 	}

Index: src/sbin/fsck/fsutil.c
diff -u src/sbin/fsck/fsutil.c:1.21 src/sbin/fsck/fsutil.c:1.22
--- src/sbin/fsck/fsutil.c:1.21	Sat Apr  7 00:52:20 2012
+++ src/sbin/fsck/fsutil.c	Sat Apr  7 12:44:10 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: fsutil.c,v 1.21 2012/04/07 04:52:20 christos Exp $	*/
+/*	$NetBSD: fsutil.c,v 1.22 2012/04/07 16:44:10 christos Exp $	*/
 
 /*
  * Copyright (c) 1990, 1993
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: fsutil.c,v 1.21 2012/04/07 04:52:20 christos Exp $");
+__RCSID("$NetBSD: fsutil.c,v 1.22 2012/04/07 16:44:10 christos Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -167,45 +167,13 @@ panic(const char *fmt, ...)
 }
 
 const char *
-unrawname(const char *name)
-{
-	static char unrawbuf[MAXPATHLEN];
-	const char *dp;
-	struct stat stb;
-
-	if ((dp = strrchr(name, '/')) == 0)
-		return (name);
-	if (stat(name, &stb) < 0)
-		return (name);
-	if (!S_ISCHR(stb.st_mode))
-		return (name);
-	if (dp[1] != 'r')
-		return (name);
-	(void)snprintf(unrawbuf, sizeof(unrawbuf), "%.*s/%s",
-	    (int)(dp - name), name, dp + 2);
-	return (unrawbuf);
-}
-
-const char *
-rawname(const char *name)
-{
-	static char rawbuf[MAXPATHLEN];
-	const char *dp;
-
-	if ((dp = strrchr(name, '/')) == 0)
-		return (0);
-	(void)snprintf(rawbuf, sizeof(rawbuf), "%.*s/r%s",
-	    (int)(dp - name), name, dp + 1);
-	return (rawbuf);
-}
-
-const char *
 blockcheck(const char *origname)
 {
 	struct stat stslash, stblock, stchar;
 	const char *newname, *raw;
 	struct fstab *fsp;
 	int retried = 0;
+	static char buf[MAXPATHLEN];
 
 	hot = 0;
 	if (stat("/", &stslash) < 0) {
@@ -221,7 +189,11 @@ retry:
 	if (S_ISBLK(stblock.st_mode)) {
 		if (stslash.st_dev == stblock.st_rdev)
 			hot++;
-		raw = rawname(newname);
+		raw = getdiskrawname(buf, sizeof(buf), newname);
+		if (raw == NULL) {
+			perr("Can't convert to raw `%s'", newname);
+			return origname;
+		}
 		if (stat(raw, &stchar) < 0) {
 			perr("Can't stat `%s'", raw);
 			return (origname);
@@ -233,12 +205,17 @@ retry:
 			return (origname);
 		}
 	} else if (S_ISCHR(stblock.st_mode) && !retried) {
-		newname = unrawname(newname);
+		raw = getdiskcookedname(buf, sizeof(buf), newname);
+		if (raw == NULL) {
+			perr("Can't convert to cooked `%s'", newname);
+			return origname;
+		} else
+			newname = raw;
 		retried++;
 		goto retry;
 	} else if ((fsp = getfsfile(newname)) != 0 && !retried) {
-		char buf[MAXPATHLEN];
-		newname = getfsspecname(buf, sizeof(buf), fsp->fs_spec);
+		char rbuf[MAXPATHLEN];
+		newname = getfsspecname(rbuf, sizeof(rbuf), fsp->fs_spec);
 		if (newname == NULL)
 			perr("%s", buf);
 		retried++;

Index: src/sbin/fsck/fsutil.h
diff -u src/sbin/fsck/fsutil.h:1.18 src/sbin/fsck/fsutil.h:1.19
--- src/sbin/fsck/fsutil.h:1.18	Sat Aug 27 13:34:44 2011
+++ src/sbin/fsck/fsutil.h	Sat Apr  7 12:44:10 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: fsutil.h,v 1.18 2011/08/27 17:34:44 joerg Exp $	*/
+/*	$NetBSD: fsutil.h,v 1.19 2012/04/07 16:44:10 christos Exp $	*/
 
 /*
  * Copyright (c) 1996 Christos Zoulas.  All rights reserved.
@@ -33,8 +33,6 @@ void pwarn(const char *, ...) __printfli
 void perr(const char *, ...) __printflike(1, 2);
 void panic(const char *, ...) __printflike(1, 2) __dead;
 void vmsg(int, const char *, va_list) __printflike(2, 0);
-const char *rawname(const char *);
-const char *unrawname(const char *);
 const char *blockcheck(const char *);
 const char *cdevname(void);
 void setcdevname(const char *, int);

Index: src/sbin/savecore/savecore.c
diff -u src/sbin/savecore/savecore.c:1.84 src/sbin/savecore/savecore.c:1.85
--- src/sbin/savecore/savecore.c:1.84	Tue Sep 13 15:55:28 2011
+++ src/sbin/savecore/savecore.c	Sat Apr  7 12:44:10 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: savecore.c,v 1.84 2011/09/13 19:55:28 christos Exp $	*/
+/*	$NetBSD: savecore.c,v 1.85 2012/04/07 16:44:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1986, 1992, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1986, 19
 #if 0
 static char sccsid[] = "@(#)savecore.c	8.5 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: savecore.c,v 1.84 2011/09/13 19:55:28 christos Exp $");
+__RCSID("$NetBSD: savecore.c,v 1.85 2012/04/07 16:44:10 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -166,7 +166,6 @@ static int	get_crashtime(void);
 static void	kmem_setup(void);
 static void	Lseek(int, off_t, int);
 static int	Open(const char *, int rw);
-static char	*rawname(char *s);
 static void	save_core(void);
 __dead static void	usage(const char *fmt, ...) __printflike(1, 2);
 
@@ -656,7 +655,8 @@ save_core(void)
 {
 	FILE *fp;
 	int bounds, ifd, nr, nw, ofd, tryksyms;
-	char *rawp, path[MAXPATHLEN];
+	char path[MAXPATHLEN], rbuf[MAXPATHLEN];
+	const char *rawp;
 
 	ofd = -1;
 	/*
@@ -701,7 +701,12 @@ err1:			syslog(LOG_WARNING, "%s: %m", pa
 
 	if (dumpcdev == NODEV) {
 		/* Open the raw device. */
-		rawp = rawname(ddname);
+		rawp = getdiskrawname(rbuf, sizeof(rbuf), ddname);
+		if (rawp == NULL) {
+			syslog(LOG_WARNING, "%s: %m; can't convert to raw",
+			    ddname);
+			rawp = ddname;
+		}
 		if ((ifd = open(rawp, O_RDONLY)) == -1) {
 			syslog(LOG_WARNING, "%s: %m; using block device",
 			    rawp);
@@ -832,26 +837,6 @@ find_dev(dev_t dev, mode_t type)
 	exit(1);
 }
 
-static char *
-rawname(char *s)
-{
-	char *sl;
-	char name[MAXPATHLEN];
-
-	if ((sl = strrchr(s, '/')) == NULL || sl[1] == '0') {
-		syslog(LOG_ERR,
-		    "can't make raw dump device name from %s", s);
-		return (s);
-	}
-	(void)snprintf(name, sizeof(name), "%.*s/r%s", (int)(sl - s), s,
-	    sl + 1);
-	if ((sl = strdup(name)) == NULL) {
-		syslog(LOG_ERR, "%m");
-		exit(1);
-	}
-	return (sl);
-}
-
 static int
 get_crashtime(void)
 {

Reply via email to