📄 default_store.xs
字号:
#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#include <net-snmp/agent/ds_agent.h>static intnot_here(char *s){ croak("%s not implemented on this architecture", s); return -1;}static doubleconstant_NETSNMP_DS_AGENT_P(char *name, int len, int arg){ switch (name[18 + 0]) { case 'E': if (strEQ(name + 18, "ERL_INIT_FILE")) { /* NETSNMP_DS_AGENT_P removed */#ifdef NETSNMP_DS_AGENT_PERL_INIT_FILE return NETSNMP_DS_AGENT_PERL_INIT_FILE;#else goto not_there;#endif } case 'O': if (strEQ(name + 18, "ORTS")) { /* NETSNMP_DS_AGENT_P removed */#ifdef NETSNMP_DS_AGENT_PORTS return NETSNMP_DS_AGENT_PORTS;#else goto not_there;#endif } case 'R': if (strEQ(name + 18, "ROGNAME")) { /* NETSNMP_DS_AGENT_P removed */#ifdef NETSNMP_DS_AGENT_PROGNAME return NETSNMP_DS_AGENT_PROGNAME;#else goto not_there;#endif } } errno = EINVAL; return 0;not_there: errno = ENOENT; return 0;}static doubleconstant_NETSNMP_DS_AGENT_A(char *name, int len, int arg){ if (18 + 6 >= len ) { errno = EINVAL; return 0; } switch (name[18 + 6]) { case 'M': if (strEQ(name + 18, "GENTX_MASTER")) { /* NETSNMP_DS_AGENT_A removed */#ifdef NETSNMP_DS_AGENT_AGENTX_MASTER return NETSNMP_DS_AGENT_AGENTX_MASTER;#else goto not_there;#endif } case 'P': if (strEQ(name + 18, "GENTX_PING_INTERVAL")) { /* NETSNMP_DS_AGENT_A removed */#ifdef NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL return NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL;#else goto not_there;#endif } } errno = EINVAL; return 0;not_there: errno = ENOENT; return 0;}static doubleconstant(char *name, int len, int arg){ errno = 0; if (0 + 17 >= len ) { errno = EINVAL; return 0; } switch (name[0 + 17]) { case 'A': if (!strnEQ(name + 0,"NETSNMP_DS_AGENT_", 17)) break; return constant_NETSNMP_DS_AGENT_A(name, len, arg); case 'D': if (strEQ(name + 0, "NETSNMP_DS_AGENT_DISABLE_PERL")) { /* removed */#ifdef NETSNMP_DS_AGENT_DISABLE_PERL return NETSNMP_DS_AGENT_DISABLE_PERL;#else goto not_there;#endif } case 'F': if (strEQ(name + 0, "NETSNMP_DS_AGENT_FLAGS")) { /* removed */#ifdef NETSNMP_DS_AGENT_FLAGS return NETSNMP_DS_AGENT_FLAGS;#else goto not_there;#endif } case 'G': if (strEQ(name + 0, "NETSNMP_DS_AGENT_GROUPID")) { /* removed */#ifdef NETSNMP_DS_AGENT_GROUPID return NETSNMP_DS_AGENT_GROUPID;#else goto not_there;#endif } case 'H': if (strEQ(name + 0, "NETSNMP_DS_AGENT_H")) { /* removed */#ifdef NETSNMP_DS_AGENT_H return NETSNMP_DS_AGENT_H;#else goto not_there;#endif } case 'I': if (strEQ(name + 0, "NETSNMP_DS_AGENT_INTERNAL_SECNAME")) { /* removed */#ifdef NETSNMP_DS_AGENT_INTERNAL_SECNAME return NETSNMP_DS_AGENT_INTERNAL_SECNAME;#else goto not_there;#endif } case 'N': if (strEQ(name + 0, "NETSNMP_DS_AGENT_NO_ROOT_ACCESS")) { /* removed */#ifdef NETSNMP_DS_AGENT_NO_ROOT_ACCESS return NETSNMP_DS_AGENT_NO_ROOT_ACCESS;#else goto not_there;#endif } case 'P': if (!strnEQ(name + 0,"NETSNMP_DS_AGENT_", 17)) break; return constant_NETSNMP_DS_AGENT_P(name, len, arg); case 'Q': if (strEQ(name + 0, "NETSNMP_DS_AGENT_QUIT_IMMEDIATELY")) { /* removed */#ifdef NETSNMP_DS_AGENT_QUIT_IMMEDIATELY return NETSNMP_DS_AGENT_QUIT_IMMEDIATELY;#else goto not_there;#endif } case 'R': if (strEQ(name + 0, "NETSNMP_DS_AGENT_ROLE")) { /* removed */#ifdef NETSNMP_DS_AGENT_ROLE return NETSNMP_DS_AGENT_ROLE;#else goto not_there;#endif } case 'U': if (strEQ(name + 0, "NETSNMP_DS_AGENT_USERID")) { /* removed */#ifdef NETSNMP_DS_AGENT_USERID return NETSNMP_DS_AGENT_USERID;#else goto not_there;#endif } case 'V': if (strEQ(name + 0, "NETSNMP_DS_AGENT_VERBOSE")) { /* removed */#ifdef NETSNMP_DS_AGENT_VERBOSE return NETSNMP_DS_AGENT_VERBOSE;#else goto not_there;#endif } case 'X': if (strEQ(name + 0, "NETSNMP_DS_AGENT_X_SOCKET")) { /* removed */#ifdef NETSNMP_DS_AGENT_X_SOCKET return NETSNMP_DS_AGENT_X_SOCKET;#else goto not_there;#endif } } errno = EINVAL; return 0;not_there: errno = ENOENT; return 0;}MODULE = NetSNMP::agent::default_store PACKAGE = NetSNMP::agent::default_store doubleconstant(sv,arg) PREINIT: STRLEN len; INPUT: SV * sv char * s = SvPV(sv, len); int arg CODE: RETVAL = constant(s,len,arg); OUTPUT: RETVAL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -