Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00032 #include "flat_uri.h"
00033
00034 #include "../../mem/mem.h"
00035 #include "../../ut.h"
00036
00037 #include <stdlib.h>
00038 #include <string.h>
00039
00040
00041 static void flat_uri_free(db_uri_t* uri, struct flat_uri* payload)
00042 {
00043 if (payload == NULL) return;
00044 if (payload->path.s) free(payload->path.s);
00045 db_drv_free(&payload->drv);
00046 pkg_free(payload);
00047 }
00048
00049
00050 int flat_uri(db_uri_t* uri)
00051 {
00052 struct flat_uri* furi;
00053
00054 if ((furi = (struct flat_uri*)pkg_malloc(sizeof(*furi))) == NULL) {
00055 ERR("flatstore: No memory left\n");
00056 return -1;
00057 }
00058 memset(furi, '\0', sizeof(*furi));
00059 if (db_drv_init(&furi->drv, flat_uri_free) < 0) goto error;
00060
00061 if ((furi->path.s = get_abs_pathname(NULL, &uri->body)) == NULL) {
00062 ERR("flatstore: Error while obtaining absolute pathname for '%.*s'\n",
00063 STR_FMT(&uri->body));
00064 goto error;
00065 }
00066 furi->path.len = strlen(furi->path.s);
00067
00068 DB_SET_PAYLOAD(uri, furi);
00069 return 0;
00070
00071 error:
00072 if (furi) {
00073 if (furi->path.s) pkg_free(furi->path.s);
00074 db_drv_free(&furi->drv);
00075 pkg_free(furi);
00076 }
00077 return -1;
00078 }
00079