cpe_lang.h
Go to the documentation of this file.
/*
* Copyright 2009 Red Hat Inc., Durham, North Carolina.
* All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors:
* Lukas Kuklinek <lkuklinek@redhat.com>
* Maros Barabas <mbarabas@redhat.com>
*/
#ifndef CPELANG_H_
#define CPELANG_H_
#include <stdlib.h>
#include "cpe_name.h"
#include "oscap_text.h"
typedef enum {
CPE_LANG_OPER_INVALID = 0x00,
CPE_LANG_OPER_AND = 0x01,
CPE_LANG_OPER_OR = 0x02,
CPE_LANG_OPER_MATCH = 0x04,
CPE_LANG_OPER_CHECK = 0x08,
CPE_LANG_OPER_MASK = 0xFF,
CPE_LANG_OPER_NOT = 0x100,
CPE_LANG_OPER_NAND = CPE_LANG_OPER_AND | CPE_LANG_OPER_NOT,
CPE_LANG_OPER_NOR = CPE_LANG_OPER_OR | CPE_LANG_OPER_NOT,
} cpe_lang_oper_t;
struct cpe_lang_model;
struct cpe_platform;
struct cpe_testexpr;
/************************************************************/
struct cpe_platform_iterator;
struct cpe_platform *cpe_platform_iterator_next(struct cpe_platform_iterator *it);
bool cpe_platform_iterator_has_more(struct cpe_platform_iterator *it);
void cpe_platform_iterator_free(struct cpe_platform_iterator *it);
struct cpe_testexpr_iterator;
struct cpe_testexpr *cpe_testexpr_iterator_next(struct cpe_testexpr_iterator *it);
bool cpe_testexpr_iterator_has_more(struct cpe_testexpr_iterator *it);
void cpe_testexpr_iterator_free(struct cpe_testexpr_iterator *it);
/************************************************************/
/************************************************************/
cpe_lang_oper_t cpe_testexpr_get_oper(const struct cpe_testexpr *item);
struct cpe_testexpr_iterator *cpe_testexpr_get_meta_expr(const struct cpe_testexpr *item);
const struct cpe_name *cpe_testexpr_get_meta_cpe(const struct cpe_testexpr *item);
const char* cpe_testexpr_get_meta_check_system(const struct cpe_testexpr *item);
const char* cpe_testexpr_get_meta_check_href(const struct cpe_testexpr *item);
const char* cpe_testexpr_get_meta_check_id(const struct cpe_testexpr *item);
const struct cpe_testexpr *cpe_testexpr_get_next(const struct cpe_testexpr *expr);
struct cpe_platform_iterator *cpe_lang_model_get_platforms(const struct cpe_lang_model *item);
struct cpe_platform *cpe_lang_model_get_item(const struct cpe_lang_model *item, const char *key);
bool cpe_platform_applicable_lang_model(const char* platform, struct cpe_lang_model *lang_model, cpe_check_fn check_cb, cpe_dict_fn dict_cb, void* usr);
const char *cpe_platform_get_id(const struct cpe_platform *item);
const char *cpe_platform_get_remark(const struct cpe_platform *item);
struct oscap_text_iterator *cpe_platform_get_titles(const struct cpe_platform *item);
const struct cpe_testexpr *cpe_platform_get_expr(const struct cpe_platform *item);
/************************************************************/
/************************************************************/
bool cpe_lang_model_add_platform(struct cpe_lang_model *lang, struct cpe_platform *platform);
bool cpe_platform_add_title(struct cpe_platform *platform, struct oscap_text *title);
/*bool cpe_lang_model_add_xmlns(struct cpe_lang_model * model, struct xml_metadata * xml);*/
bool cpe_testexpr_add_subexpression(struct cpe_testexpr *expr, struct cpe_testexpr *sub);
bool cpe_platform_set_id(struct cpe_platform *platform, const char *new_id);
bool cpe_platform_set_remark(struct cpe_platform *platform, const char *new_remark);
bool cpe_platform_set_expr(struct cpe_platform *platform, struct cpe_testexpr *expr);
bool cpe_testexpr_set_oper(struct cpe_testexpr *expr, cpe_lang_oper_t oper);
bool cpe_testexpr_set_name(struct cpe_testexpr *expr, struct cpe_name *name);
/************************************************************/
void cpe_platform_iterator_remove(struct cpe_platform_iterator *it, struct cpe_lang_model *parent);
void cpe_platform_iterator_reset(struct cpe_platform_iterator *it);
struct cpe_lang_model *cpe_lang_model_new(void);
struct cpe_testexpr *cpe_testexpr_new(void);
struct cpe_platform *cpe_platform_new(void);
struct cpe_testexpr * cpe_testexpr_clone(struct cpe_testexpr * old_expr);
void cpe_testexpr_free(struct cpe_testexpr *expr);
void cpe_testexpr_iterator_reset(struct cpe_testexpr_iterator *it);
void cpe_lang_model_free(struct cpe_lang_model *platformspec);
void cpe_platform_free(struct cpe_platform *platform);
/************************************************************/
const char * cpe_lang_model_supported(void);
char * cpe_lang_model_detect_version(const char* file);
bool cpe_platform_match_cpe(struct cpe_name **cpe, size_t n, const struct cpe_platform *platform);
/************************************************************/
struct cpe_lang_model *cpe_lang_model_import(const char *file);
bool cpe_lang_model_set_origin_file(struct cpe_lang_model* lang_model, const char* origin_file);
const char* cpe_lang_model_get_origin_file(const struct cpe_lang_model* lang_model);
void cpe_lang_model_export(const struct cpe_lang_model *spec, const char *file);
#endif /* _CPELANG_H_ */