summaryrefslogtreecommitdiff
path: root/libstore/decode.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1996-03-22 01:02:09 +0000
committerMiles Bader <miles@gnu.org>1996-03-22 01:02:09 +0000
commit3e3c0752ad06c38a71b248c9af6886cf065f13e9 (patch)
tree871ea73279a9adc84c6d0954ccaae4f0a8651481 /libstore/decode.c
parent5705c305eda4a1f516e209c065e2c48a0f5f5200 (diff)
Formerly decode.c.~2~
Diffstat (limited to 'libstore/decode.c')
-rw-r--r--libstore/decode.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/libstore/decode.c b/libstore/decode.c
index 82cbf5a3..a809bf48 100644
--- a/libstore/decode.c
+++ b/libstore/decode.c
@@ -23,11 +23,35 @@
#include <string.h>
#include "store.h"
-
+
/* Decode ENC, either returning a new store in STORE, or an error. If
nothing else is to be done with ENC, its contents may then be freed using
store_enc_dealloc. */
error_t
-store_decode (struct store_enc *enc, struct store *store)
+store_decode (struct store_enc *enc, struct store **store)
{
+ if (enc->cur_ints >= enc->ints_len)
+ /* The first int should always be the type. */
+ return EINVAL;
+
+ switch (enc->ints[enc->cur_ints])
+ {
+ case STORAGE_HURD_FILE:
+ case STORAGE_DEVICE:
+ case STORAGE_TASK:
+ case STORAGE_MEMORY:
+ return store_default_leaf_decode (enc, store);
+
+ case STORAGE_ILEAVE:
+ return store_ileave_decode (enc, store);
+ case STORAGE_CONCAT:
+ return store_concat_decode (enc, store);
+ case STORAGE_LAYER:
+ return store_layer_decode (enc, store);
+ case STORAGE_NULL:
+ return store_null_decode (enc, store);
+
+ default:
+ return EINVAL;
+ }
}