API struct ly_ctx * ly_ctx_new(const char *search_dir) { struct ly_ctx *ctx; char *cwd; ctx = calloc(1, sizeof *ctx); if (!ctx) { LOGMEM; return NULL; } /* dictionary */ lydict_init(&ctx->dict); /* models list */ ctx->models.list = calloc(16, sizeof *ctx->models.list); ctx->models.used = 0; ctx->models.size = 16; if (search_dir) { cwd = get_current_dir_name(); if (chdir(search_dir)) { LOGERR(LY_ESYS, "Unable to use search directory \"%s\" (%s)", search_dir, strerror(errno)); free(cwd); ly_ctx_destroy(ctx); return NULL; } ctx->models.search_path = get_current_dir_name(); chdir(cwd); free(cwd); } return ctx; }
API struct ly_ctx * ly_ctx_new(const char *search_dir) { struct ly_ctx *ctx; char *cwd; ctx = calloc(1, sizeof *ctx); if (!ctx) { LOGMEM; return NULL; } /* dictionary */ lydict_init(&ctx->dict); /* models list */ ctx->models.list = calloc(16, sizeof *ctx->models.list); if (!ctx->models.list) { LOGMEM; free(ctx); return NULL; } ctx->models.used = 0; ctx->models.size = 16; if (search_dir) { cwd = get_current_dir_name(); if (chdir(search_dir)) { LOGERR(LY_ESYS, "Unable to use search directory \"%s\" (%s)", search_dir, strerror(errno)); free(cwd); ly_ctx_destroy(ctx); return NULL; } ctx->models.search_path = get_current_dir_name(); chdir(cwd); free(cwd); } ctx->models.module_set_id = 1; /* load ietf-inet-types */ ctx->models.list[0] = (struct lys_module *)lys_parse_data(ctx, (char *)ietf_inet_types_2013_07_15_yin, LYS_IN_YIN); if (!ctx->models.list[0]) { ly_ctx_destroy(ctx); return NULL; } /* load ietf-yang-types */ ctx->models.list[1] = (struct lys_module *)lys_parse_data(ctx, (char *)ietf_yang_types_2013_07_15_yin, LYS_IN_YIN); if (!ctx->models.list[1]) { ly_ctx_destroy(ctx); return NULL; } /* load ietf-yang-library */ ctx->models.list[2] = (struct lys_module *)lys_parse_data(ctx, (char *)ietf_yang_library_2015_07_03_yin, LYS_IN_YIN); if (!ctx->models.list[2]) { ly_ctx_destroy(ctx); return NULL; } return ctx; }