From 0f699dcf1d8087b26084ee72b8cce5396890da66 Mon Sep 17 00:00:00 2001 From: pooka Date: Sun, 18 Oct 2009 19:09:20 +0000 Subject: [PATCH] Make it possible to supply parameters to puffs_init() later (but before puffs_mount()). --- lib/libpuffs/puffs.c | 28 ++++++++++++++++++++++------ lib/libpuffs/puffs.h | 5 ++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/libpuffs/puffs.c b/lib/libpuffs/puffs.c index 29ea4956917f..44272fa1c15e 100644 --- a/lib/libpuffs/puffs.c +++ b/lib/libpuffs/puffs.c @@ -1,4 +1,4 @@ -/* $NetBSD: puffs.c,v 1.99 2009/10/17 23:19:52 pooka Exp $ */ +/* $NetBSD: puffs.c,v 1.100 2009/10/18 19:09:20 pooka Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -31,7 +31,7 @@ #include #if !defined(lint) -__RCSID("$NetBSD: puffs.c,v 1.99 2009/10/17 23:19:52 pooka Exp $"); +__RCSID("$NetBSD: puffs.c,v 1.100 2009/10/18 19:09:20 pooka Exp $"); #endif /* !lint */ #include @@ -276,6 +276,18 @@ puffs_setspecific(struct puffs_usermount *pu, void *privdata) pu->pu_privdata = privdata; } +void +puffs_setmntinfo(struct puffs_usermount *pu, + const char *mntfromname, const char *puffsname) +{ + struct puffs_kargs *pargs = pu->pu_kargp; + + (void)strlcpy(pargs->pa_mntfromname, mntfromname, + sizeof(pargs->pa_mntfromname)); + (void)strlcpy(pargs->pa_typename, puffsname, + sizeof(pargs->pa_typename)); +} + size_t puffs_getmaxreqlen(struct puffs_usermount *pu) { @@ -596,6 +608,13 @@ _puffs_init(int dummy, struct puffs_ops *pops, const char *mntfromname, struct puffs_kargs *pargs; int sverrno; + if (puffsname == PUFFS_DEFER) + puffsname = "n/a"; + if (mntfromname == PUFFS_DEFER) + mntfromname = "n/a"; + if (priv == PUFFS_DEFER) + priv = NULL; + pu = malloc(sizeof(struct puffs_usermount)); if (pu == NULL) goto failfree; @@ -609,10 +628,7 @@ _puffs_init(int dummy, struct puffs_ops *pops, const char *mntfromname, pargs->pa_vers = PUFFSDEVELVERS | PUFFSVERSION; pargs->pa_flags = PUFFS_FLAG_KERN(pflags); fillvnopmask(pops, pargs->pa_vnopmask); - (void)strlcpy(pargs->pa_typename, puffsname, - sizeof(pargs->pa_typename)); - (void)strlcpy(pargs->pa_mntfromname, mntfromname, - sizeof(pargs->pa_mntfromname)); + puffs_setmntinfo(pu, mntfromname, puffsname); puffs_zerostatvfs(&pargs->pa_svfsb); pargs->pa_root_cookie = NULL; diff --git a/lib/libpuffs/puffs.h b/lib/libpuffs/puffs.h index eb66f970166e..c35047d38ebb 100644 --- a/lib/libpuffs/puffs.h +++ b/lib/libpuffs/puffs.h @@ -1,4 +1,4 @@ -/* $NetBSD: puffs.h,v 1.111 2009/10/17 23:19:52 pooka Exp $ */ +/* $NetBSD: puffs.h,v 1.112 2009/10/18 19:09:20 pooka Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -418,6 +418,7 @@ typedef void (*puffs_framev_cb)(struct puffs_usermount *, __BEGIN_DECLS +#define PUFFS_DEFER ((void *)-1) struct puffs_usermount *_puffs_init(int, struct puffs_ops *, const char *, const char *, void *, uint32_t); int puffs_mount(struct puffs_usermount *, const char *, int, void*); @@ -446,6 +447,8 @@ void puffs_setspecific(struct puffs_usermount *, void *); void puffs_setmaxreqlen(struct puffs_usermount *, size_t); size_t puffs_getmaxreqlen(struct puffs_usermount *); void puffs_setfhsize(struct puffs_usermount *, size_t, int); +void puffs_setmntinfo(struct puffs_usermount *, + const char *, const char *); void puffs_setncookiehash(struct puffs_usermount *, int);