/** * * @retval 0 no errors * @retval !0 errors */ static int _load6(netsnmp_container *container, u_int load_flags) { netsnmp_file *fp; netsnmp_line_process_info lpi; if (NULL == container) return -1; /* * allocate file resources */ fp = netsnmp_file_fill(NULL, "/proc/net/udp6" , O_RDONLY, 0, 0); if (NULL == fp) /** msg already logged */ return -2; memset(&lpi, 0x0, sizeof(lpi)); lpi.mem_size = sizeof(netsnmp_udp_endpoint_entry); lpi.process = _process_line_udp_ep; lpi.user_context = (void*)CONTAINER_SIZE(container); container = netsnmp_file_text_parse(fp, container, PM_USER_FUNCTION, 0, &lpi); netsnmp_file_release(fp); return (NULL == container); }
netsnmp_container * netsnmp_text_token_container_from_file(const char *file, u_int flags, netsnmp_container *cin, void *context) { netsnmp_line_process_info lpi; netsnmp_container *c = cin, *c_rc; netsnmp_file *fp; if (NULL == file) return NULL; /* * allocate file resources */ fp = netsnmp_file_fill(NULL, file, O_RDONLY, 0, 0); if (NULL == fp) /** msg already logged */ return NULL; memset(&lpi, 0x0, sizeof(lpi)); lpi.mem_size = sizeof(netsnmp_token_value_index); lpi.process = _process_line_tvi; lpi.user_context = context; if (NULL == c) { c = netsnmp_container_find("string:binary_array"); if (NULL == c) { snmp_log(LOG_ERR,"malloc failed\n"); netsnmp_file_release(fp); return NULL; } } c_rc = netsnmp_file_text_parse(fp, c, PM_USER_FUNCTION, 0, &lpi); /* * if we got a bad return and the user didn't pass us a container, * we need to release the container we allocated. */ if ((NULL == c_rc) && (NULL == cin)) { CONTAINER_FREE(c); c = NULL; } else c = c_rc; /* * release file resources */ netsnmp_file_release(fp); return c; }
/** * open file and get stats */ netsnmp_file * netsnmp_file_new(const char *name, int fs_flags, mode_t mode, u_int ns_flags) { netsnmp_file *filei = netsnmp_file_fill(NULL, name, fs_flags, mode, 0); if (NULL == filei) return NULL; if (ns_flags & NETSNMP_FILE_STATS) { filei->stats = (struct stat*)calloc(1, sizeof(*(filei->stats))); if (NULL == filei->stats) DEBUGMSGT(("nsfile:new", "no memory for stats\n")); else if (stat(name, filei->stats) != 0) DEBUGMSGT(("nsfile:new", "error getting stats\n")); } if (ns_flags & NETSNMP_FILE_AUTO_OPEN) netsnmp_file_open(filei); return filei; }