Files
m241Neelima/components/ip_net2-6.9/ipcom/src/ipcom_sysvar_conf.c
T
2026-07-30 11:19:44 +05:30

194 lines
5.7 KiB
C

/*
******************************************************************************
* INTERPEAK SOURCE FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipcom_sysvar_conf.c,v $ $Revision: 1.5 $
* $Source: /home/interpeak/CVSRoot/ipcom/src/ipcom_sysvar_conf.c,v $
* $Author: rime $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Lennart Bang <lob@interpeak.se>
******************************************************************************
*/
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ipcom_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#define IPCOM_USE_CLIB_PROTO
#include "ipcom_clib.h"
#include "ipcom_err.h"
#include "ipcom_sysvar.h"
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/*
****************************************************************************
* 6 EXTERN PROTOTYPES
****************************************************************************
*/
/*
****************************************************************************
* 7 LOCAL PROTOTYPES
****************************************************************************
*/
/*
****************************************************************************
* 8 DATA
****************************************************************************
*/
/*
****************************************************************************
* 9 LOCAL FUNCTIONS
****************************************************************************
*/
/*
****************************************************************************
* 10 PUBLIC FUNCTIONS
****************************************************************************
*/
/*
*===========================================================================
* ipcom_sysvar_get_conf
*===========================================================================
* Description:
* Parameters:
* Returns:
*/
IP_PUBLIC char *
ipcom_sysvar_get_conf(const char *name, char *value, Ip_size_t *value_size,
const char *username, const char *ifname)
{
char buf[256];
Ip_size_t org_value_size;
char *ret;
if (value != IP_NULL && value_size == IP_NULL)
{
return IP_NULL;
}
org_value_size = value_size ? *value_size : 0;
/* First try user configuration. */
if (username && *username)
{
ipcom_snprintf(buf, sizeof(buf), "ipcom.users.%s.%s", username, name);
ret = ipcom_sysvar_get(buf, value, value_size);
if (ret)
return ret;
if (value_size && *value_size > org_value_size)
return IP_NULL;
}
/* Second try interface configuration. */
if (ifname && *ifname)
{
ipcom_snprintf(buf, sizeof(buf), "ipcom.if.%s.%s", ifname, name);
ret = ipcom_sysvar_get(buf, value, value_size);
if (ret)
return ret;
if (value_size && *value_size > org_value_size)
return IP_NULL;
}
/* Third try global configuration. */
return ipcom_sysvar_get(name, value, value_size);
}
/*
*===========================================================================
* ipcom_sysvar_set_conf
*===========================================================================
* Description:
* Parameters:
* Returns:
*/
IP_PUBLIC Ip_err
ipcom_sysvar_set_conf(const char *name, const char *value, int flags,
const char *username, const char *ifname)
{
char buf[256];
if (username && *username)
{
ipcom_snprintf(buf, sizeof(buf), "ipcom.users.%s.%s", username, name);
return ipcom_sysvar_set(buf, value, flags);
}
if (ifname && *ifname)
{
ipcom_snprintf(buf, sizeof(buf), "ipcom.if.%s.%s", ifname, name);
return ipcom_sysvar_set(buf, value, flags);
}
return ipcom_sysvar_set(name, value, flags);
}
/*
*===========================================================================
* ipcom_sysvar_get_conf_as_int
*===========================================================================
* Description:
* Parameters:
* Returns: Integer config value stored under 'name' or -1 if not found.
*/
IP_PUBLIC int
ipcom_sysvar_get_conf_as_int(const char *name,
const char *username, const char *ifname)
{
char strval[16];
Ip_size_t strval_len = sizeof(strval);
if (ipcom_sysvar_get_conf(name, strval, &strval_len,
username, ifname) == IP_NULL)
return -1;
return ipcom_atoi(strval);
}
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/