diff options
author | Miles Bader <miles@gnu.org> | 1996-10-08 18:42:19 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 1996-10-08 18:42:19 +0000 |
commit | 86e0aa5242483e3d857a4e11fcd46a852b811dc0 (patch) | |
tree | 8a364e29a18224bc946263aacc8cd16c3a61ce8c /libstore | |
parent | 7b8650c5fb5a970d0da4e837c415aa781a9d5e2e (diff) |
(store_create):
Add special handling of STORE_INACTIVE in FLAGS.
Free *STORE when store_set_flags fails.
Make CLASSES arg const.
Diffstat (limited to 'libstore')
-rw-r--r-- | libstore/create.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/libstore/create.c b/libstore/create.c index ca710e32..48c34462 100644 --- a/libstore/create.c +++ b/libstore/create.c @@ -24,11 +24,14 @@ #include "store.h" -/* Return a new store in STORE, which refers to the storage underlying - SOURCE. CLASSES is used to select classes specified by the provider; if - it is 0, STORE_STD_CLASSES is used. FLAGS is set with store_set_flags. A - reference to SOURCE is created (but may be destroyed with - store_close_source). */ +/* Return a new store in STORE, which refers to the storage underlying SOURCE. + CLASSES is used to select classes specified by the provider; if it is 0, + STORE_STD_CLASSES is used. FLAGS is set with store_set_flags, with the + exception of STORE_INACTIVE, which merely indicates that no attempt should + be made to activate an inactive store; if STORE_INACTIVE is not specified, + and the store returned for SOURCE is inactive, an attempt is made to + activate it (failure of which causes an error to be returned). A reference + to SOURCE is created (but may be destroyed with store_close_source). */ error_t store_create (file_t source, int flags, const struct store_class *const *classes, @@ -53,9 +56,17 @@ store_create (file_t source, int flags, return err; err = store_decode (&enc, classes, store); - - if (!err && flags) - store_set_flags (*store, flags); + if (! err) + { + if (flags & STORE_INACTIVE) + flags &= ~STORE_INACTIVE; /* Don't actually make store inactive. */ + else if ((*store)->flags & STORE_INACTIVE) + err = store_clear_flags (*store, STORE_INACTIVE); + if (!err && flags) + err = store_set_flags (*store, flags); + if (err) + store_free (*store); + } store_enc_dealloc (&enc); |