view m_config.h @ 18001:a2683ee7cb5a

fix descrambling of asf file, where signed buffer could cause erroneous values to be filled in descrable variables, add misssing check for one of these variables and restore sign of these variables as insurance that these checks will work even in such case.
author iive
date Thu, 30 Mar 2006 23:06:18 +0000
parents 63909962d3fc
children 96568be4bfdc
line wrap: on
line source

#ifndef _M_CONFIG_H
#define _M_CONFIG_H

typedef struct m_config_option m_config_option_t;
typedef struct m_config_save_slot m_config_save_slot_t;
typedef struct m_profile m_profile_t;
struct m_option;
struct m_option_type;

struct m_config_save_slot {
  m_config_save_slot_t* prev;
  int lvl;
  // we have to store other datatypes in this as well,
  // so make sure we get properly aligned addresses
  unsigned char data[0] __attribute__ ((aligned (8)));
};

struct m_config_option {
  m_config_option_t* next;
  char* name; // Full name (ie option:subopt)
  struct m_option* opt;
  m_config_save_slot_t* slots;
  unsigned int flags; // currently it only tell if the option was set
};

struct m_profile {
  m_profile_t* next;
  char* name;
  char* desc;
  int num_opts;
  char** opts;
};

typedef struct m_config {
  m_config_option_t* opts;
  int lvl; // Current stack level
  int mode;
  m_profile_t* profiles;
  int profile_depth;
  struct m_option* self_opts;
} m_config_t;

#define M_CFG_OPT_SET    (1<<0)
#define M_CFG_OPT_ALIAS  (1<<1)


//////////////////////////// Functions ///////////////////////////////////

m_config_t*
m_config_new(void);

void
m_config_free(m_config_t* config);

void
m_config_push(m_config_t* config);

void
m_config_pop(m_config_t* config);

int
m_config_register_options(m_config_t *config, struct m_option *args);

int
m_config_set_option(m_config_t *config, char* arg, char* param);

int
m_config_check_option(m_config_t *config, char* arg, char* param);

struct m_option*
m_config_get_option(m_config_t *config, char* arg);

void
m_config_print_option_list(m_config_t *config);

m_profile_t*
m_config_get_profile(m_config_t* config, char* name);

m_profile_t*
m_config_add_profile(m_config_t* config, char* name);

void
m_profile_set_desc(m_profile_t* p, char* desc);

int
m_config_set_profile_option(m_config_t* config, m_profile_t* p,
			    char* name, char* val);

#endif /* _M_CONFIG_H */