Module Name: src
Committed By: sborrill
Date: Fri Oct 16 12:10:54 UTC 2009
Modified Files:
src/lib/libpuffs [netbsd-5]: puffs.c puffs.h
Log Message:
Pull up the following revisions(s) (requested by pooka in ticket #1095):
lib/libpuffs/puffs.c: revision 1.94
lib/libpuffs/puffs.h: revision 1.110
Add puffs_cancel(), which allows to back down after puffs_init()
and before puffs_mount().
To generate a diff of this commit:
cvs rdiff -u -r1.92.4.1 -r1.92.4.2 src/lib/libpuffs/puffs.c
cvs rdiff -u -r1.108.4.1 -r1.108.4.2 src/lib/libpuffs/puffs.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libpuffs/puffs.c
diff -u src/lib/libpuffs/puffs.c:1.92.4.1 src/lib/libpuffs/puffs.c:1.92.4.2
--- src/lib/libpuffs/puffs.c:1.92.4.1 Fri Oct 16 12:07:23 2009
+++ src/lib/libpuffs/puffs.c Fri Oct 16 12:10:54 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: puffs.c,v 1.92.4.1 2009/10/16 12:07:23 sborrill Exp $ */
+/* $NetBSD: puffs.c,v 1.92.4.2 2009/10/16 12:10:54 sborrill Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#if !defined(lint)
-__RCSID("$NetBSD: puffs.c,v 1.92.4.1 2009/10/16 12:07:23 sborrill Exp $");
+__RCSID("$NetBSD: puffs.c,v 1.92.4.2 2009/10/16 12:10:54 sborrill Exp $");
#endif /* !lint */
#include <sys/param.h>
@@ -463,12 +463,23 @@
return -1;
}
+static void
+shutdaemon(struct puffs_usermount *pu, int error)
+{
+ ssize_t n;
+
+ n = write(pu->pu_dpipe[1], &error, sizeof(int));
+ assert(n == 4);
+ close(pu->pu_dpipe[0]);
+ close(pu->pu_dpipe[1]);
+ pu->pu_state &= ~PU_PUFFSDAEMON;
+}
+
int
puffs_mount(struct puffs_usermount *pu, const char *dir, int mntflags,
puffs_cookie_t cookie)
{
char rp[MAXPATHLEN];
- ssize_t n;
int rv, fd, sverrno;
char *comfd;
@@ -566,12 +577,8 @@
free(pu->pu_kargp);
pu->pu_kargp = NULL;
- if (pu->pu_state & PU_PUFFSDAEMON) {
- n = write(pu->pu_dpipe[1], &sverrno, sizeof(int));
- assert(n == 4);
- close(pu->pu_dpipe[0]);
- close(pu->pu_dpipe[1]);
- }
+ if (pu->pu_state & PU_PUFFSDAEMON)
+ shutdaemon(pu, sverrno);
errno = sverrno;
return rv;
@@ -658,6 +665,15 @@
return NULL;
}
+void
+puffs_cancel(struct puffs_usermount *pu, int error)
+{
+
+ assert(puffs_getstate(pu) < PUFFS_STATE_RUNNING);
+ shutdaemon(pu, error);
+ free(pu);
+}
+
/*
* XXX: there's currently no clean way to request unmount from
* within the user server, so be very brutal about it.
@@ -669,6 +685,7 @@
struct puffs_node *pn;
force = 1; /* currently */
+ assert((pu->pu_state & PU_PUFFSDAEMON) == 0);
if (pu->pu_fd)
close(pu->pu_fd);
Index: src/lib/libpuffs/puffs.h
diff -u src/lib/libpuffs/puffs.h:1.108.4.1 src/lib/libpuffs/puffs.h:1.108.4.2
--- src/lib/libpuffs/puffs.h:1.108.4.1 Fri Oct 16 12:07:23 2009
+++ src/lib/libpuffs/puffs.h Fri Oct 16 12:10:54 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: puffs.h,v 1.108.4.1 2009/10/16 12:07:23 sborrill Exp $ */
+/* $NetBSD: puffs.h,v 1.108.4.2 2009/10/16 12:10:54 sborrill Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
@@ -419,6 +419,7 @@
const char *, void *, uint32_t);
int puffs_mount(struct puffs_usermount *, const char *, int, void*);
int puffs_exit(struct puffs_usermount *, int);
+void puffs_cancel(struct puffs_usermount *, int);
int puffs_mainloop(struct puffs_usermount *);
int puffs_daemon(struct puffs_usermount *, int, int);