static void read_loop(param_t p) { FILE *f = parfile("loop", p->use_dna_params); look_for_dashes(f); char buf[MAXLINE+1]; int i; for (i = 0; i <= LOOP_MAX; i++) { p->internal_loop_initiation[i] = NOT_A_NUMBER; p->bulge_loop_initiation[i] = NOT_A_NUMBER; p->hairpin_loop_initiation[i] = NOT_A_NUMBER; } while (fgets(buf, MAXLINE, f)) { if (strlen(buf) >= MAXLINE) die("read_loop: line too long"); char fld[4][MAXLINE]; if (sscanf(buf, "%s%s%s%s", fld[0], fld[1], fld[2], fld[3]) != 4) die("read_loop: could not find 4 fields"); const int i = atoi(fld[0]); if (i <= 0 || i > LOOP_MAX) die("read_loop: index out of range"); p->internal_loop_initiation[i] = value_from_string(fld[1]); p->bulge_loop_initiation[i] = value_from_string(fld[2]); p->hairpin_loop_initiation[i] = value_from_string(fld[3]); } fclose(f); }
static void read_stack(const char *name, int use_dna_params, tab4_t *p) { fill4(p, NOT_A_NUMBER); const int coaxial = !strcmp(name,"coaxial"); FILE *f = parfile(name, use_dna_params); look_for_line_containing(f, "STACKING ENERGIES"); char buf[MAXLINE+1]; int i = 0, k = 0; while (fgets(buf, MAXLINE, f)) { if (strlen(buf) >= MAXLINE) die("read_stack: line too long"); if (!strchr(buf,'.')) continue; int j = 0, l = 0; char *b; for (b = strtok(buf,whitespace); b; b = strtok(0,whitespace)) { if (coaxial) (*p)[j][i][k][l] = value_from_string(b); else (*p)[i][j][k][l] = value_from_string(b); l++; if (l == NBASE) { j++; l = 0; } } k++; if (k == NBASE) { i++; k = 0; } } fclose(f); }
static int setting_get_priority(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { HKEY key = (HKEY) param; if (! param) return -1; unsigned long constant; switch (get_number(key, (TCHAR *) name, &constant, false)) { case 0: return value_from_string(name, value, (const TCHAR *) default_value); case -1: return -1; } return value_from_string(name, value, priority_strings[priority_constant_to_index(constant)]); }
static int_t next_value(FILE *f) { look_for_arrow(f); char buf[MAXLINE+1]; read_next_line(f, buf); return value_from_string(strtok(buf,whitespace)); }
static int native_get_dependonservice(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { SC_HANDLE service_handle = (SC_HANDLE) param; if (! service_handle) return -1; TCHAR *buffer; unsigned long buflen; if (get_service_dependencies(service_name, service_handle, &buffer, &buflen, DEPENDENCY_SERVICES)) return -1; int ret; if (buflen) { TCHAR *formatted; unsigned long newlen; if (format_double_null(buffer, buflen, &formatted, &newlen)) { HeapFree(GetProcessHeap(), 0, buffer); return -1; } ret = value_from_string(name, value, formatted); HeapFree(GetProcessHeap(), 0, formatted); HeapFree(GetProcessHeap(), 0, buffer); } else { value->string = 0; ret = 0; } return ret; }
static int setting_get_affinity(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { HKEY key = (HKEY) param; if (! key) return -1; unsigned long type; TCHAR *buffer = 0; unsigned long buflen = 0; int ret = RegQueryValueEx(key, name, 0, &type, 0, &buflen); if (ret == ERROR_FILE_NOT_FOUND) { if (value_from_string(name, value, NSSM_AFFINITY_ALL) == 1) return 0; return -1; } if (ret != ERROR_SUCCESS) return -1; if (type != REG_SZ) return -1; buffer = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, buflen); if (! buffer) { print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("affinity"), _T("setting_get_affinity")); return -1; } if (get_string(key, (TCHAR *) name, buffer, buflen, false, false, true)) { HeapFree(GetProcessHeap(), 0, buffer); return -1; } __int64 affinity; if (affinity_string_to_mask(buffer, &affinity)) { print_message(stderr, NSSM_MESSAGE_BOGUS_AFFINITY_MASK, buffer, num_cpus() - 1); HeapFree(GetProcessHeap(), 0, buffer); return -1; } HeapFree(GetProcessHeap(), 0, buffer); /* Canonicalise. */ if (affinity_mask_to_string(affinity, &buffer)) { if (buffer) HeapFree(GetProcessHeap(), 0, buffer); return -1; } ret = value_from_string(name, value, buffer); HeapFree(GetProcessHeap(), 0, buffer); return ret; }
static void read_next_values(FILE *f, int_t *v, int n) { char buf[MAXLINE+1]; read_next_line(f, buf); int i; for (i = 0; i < n; i++) v[i] = value_from_string(strtok(i == 0 ? buf : 0, whitespace)); }
static int setting_get_string(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { HKEY key = (HKEY) param; TCHAR buffer[VALUE_LENGTH]; if (get_string(key, (TCHAR *) name, (TCHAR *) buffer, (unsigned long) sizeof(buffer), false, false, false)) return -1; return value_from_string(name, value, buffer); }
bool yl_data_point::from_string(const String &str) { if (!key_from_string(str) || !value_from_string(str)) { return false; } return true; }
static void read_small_loop(char *buf, base_t seq[], int_t *val, int n) { char *b = strtok(buf, whitespace); int i; for (i = 0; i < n; i++) seq[i] = base_from_char(b[i]); b = strtok(0, whitespace); *val = value_from_string(b); }
static int setting_get_environment(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { HKEY key = (HKEY) param; if (! param) return -1; TCHAR *env = 0; unsigned long envlen; if (get_environment((TCHAR *) service_name, key, (TCHAR *) name, &env, &envlen)) return -1; if (! envlen) return 0; TCHAR *formatted; unsigned long newlen; if (format_double_null(env, envlen, &formatted, &newlen)) return -1; int ret; if (additional) { /* Find named environment variable. */ TCHAR *s; size_t len = _tcslen(additional); for (s = env; *s; s++) { /* Look for <additional>=<string> NULL NULL */ if (! _tcsnicmp(s, additional, len) && s[len] == _T('=')) { /* Strip <key>= */ s += len + 1; ret = value_from_string(name, value, s); HeapFree(GetProcessHeap(), 0, env); return ret; } /* Skip this string. */ for ( ; *s; s++); } HeapFree(GetProcessHeap(), 0, env); return 0; } HeapFree(GetProcessHeap(), 0, env); ret = value_from_string(name, value, formatted); if (newlen) HeapFree(GetProcessHeap(), 0, formatted); return ret; }
int native_get_description(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { SC_HANDLE service_handle = (SC_HANDLE) param; if (! service_handle) return -1; TCHAR buffer[VALUE_LENGTH]; if (get_service_description(service_name, service_handle, _countof(buffer), buffer)) return -1; if (buffer[0]) return value_from_string(name, value, buffer); value->string = 0; return 0; }
int native_get_objectname(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { SC_HANDLE service_handle = (SC_HANDLE) param; if (! service_handle) return -1; QUERY_SERVICE_CONFIG *qsc = query_service_config(service_name, service_handle); if (! qsc) return -1; int ret = value_from_string(name, value, qsc->lpServiceStartName); HeapFree(GetProcessHeap(), 0, qsc); return ret; }
int native_get_startup(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { SC_HANDLE service_handle = (SC_HANDLE) param; if (! service_handle) return -1; QUERY_SERVICE_CONFIG *qsc = query_service_config(service_name, service_handle); if (! qsc) return -1; unsigned long startup; int ret = get_service_startup(service_name, service_handle, qsc, &startup); HeapFree(GetProcessHeap(), 0, qsc); if (ret) return -1; unsigned long i; for (i = 0; startup_strings[i]; i++); if (startup >= i) return -1; return value_from_string(name, value, startup_strings[startup]); }
static Value _lib_concat(VMState *vm, Value value) { Hash *args = value_to_ptr(value); char buffer[256], *ptr = buffer; for (size_t i = 1; i < hash_size(args); ++i) { CString *string = value_to_string(hash_find(args, i)); strncpy(ptr, string->content, 255 - (ptr - buffer)); ptr += string->length; if (ptr - buffer >= 255) { ptr = buffer + 255; break; } } return value_from_string(string_pool_insert_vec(&vm->string_pool, buffer, ptr - buffer)); }
static int setting_get_exit_action(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { unsigned long exitcode = 0; unsigned long *code = 0; if (additional) { if (! is_default(additional)) { if (str_number(additional, &exitcode)) return -1; code = &exitcode; } } TCHAR action_string[ACTION_LEN]; bool default_action; if (get_exit_action(service_name, code, action_string, &default_action)) return -1; value_from_string(name, value, action_string); if (default_action && ! _tcsnicmp((const TCHAR *) action_string, (TCHAR *) default_value, ACTION_LEN)) return 0; return 1; }
int native_get_type(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { SC_HANDLE service_handle = (SC_HANDLE) param; if (! service_handle) return -1; QUERY_SERVICE_CONFIG *qsc = query_service_config(service_name, service_handle); if (! qsc) return -1; value->numeric = qsc->dwServiceType; HeapFree(GetProcessHeap(), 0, qsc); const TCHAR *string; switch (value->numeric) { case SERVICE_KERNEL_DRIVER: string = NSSM_KERNEL_DRIVER; break; case SERVICE_FILE_SYSTEM_DRIVER: string = NSSM_FILE_SYSTEM_DRIVER; break; case SERVICE_WIN32_OWN_PROCESS: string = NSSM_WIN32_OWN_PROCESS; break; case SERVICE_WIN32_SHARE_PROCESS: string = NSSM_WIN32_SHARE_PROCESS; break; case SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS: string = NSSM_INTERACTIVE_PROCESS; break; case SERVICE_WIN32_SHARE_PROCESS|SERVICE_INTERACTIVE_PROCESS: string = NSSM_SHARE_INTERACTIVE_PROCESS; break; default: string = NSSM_UNKNOWN; } return value_from_string(name, value, string); }
int native_get_name(const TCHAR *service_name, void *param, const TCHAR *name, void *default_value, value_t *value, const TCHAR *additional) { return value_from_string(name, value, service_name); }
void m_parse (char *filename) { /* Open File */ int fd = open(filename, O_RDONLY); if (fd == -1) { snmp_log(LOG_ERR, "m_parse failed to open %s: %s\n", filename, strerror(errno)); return; } size_t filesize = lseek(fd, 0, SEEK_END); void *source = mmap(0, filesize, PROT_READ, MAP_SHARED, fd, 0); if (source == MAP_FAILED) { snmp_log(LOG_ERR, "m_parse failed to mmap %s: %s\n", filename, strerror(errno)); return; } /* Compile the line-matching RegExp. * Matches lines like: * * .1.3.6.1.3.94.1.6.1.5.16.0.0.5.30.54.117.16.0.0.0.0.0.0.0.0 = INTEGER: 2 * * Captures OID String, Type and Value */ const char *error; int erroffset; pcre *re = pcre_compile("^((?:\\.[0-9]+)+) =(?: ([\\w-]+)\\:)? \"?(.*)$", PCRE_MULTILINE, &error, &erroffset, NULL); if (!re) { snmp_log(LOG_ERR, "m_parse failed to compile line-matching RE\n"); return; } /* Parse the mmap'd input file */ int ovector[OVECCOUNT]; ovector[0] = 0; ovector[1] = 0; while (1) { int options = 0; int start_offset = ovector[1]; int rc = pcre_exec( re, /* the compiled pattern */ NULL, /* no extra data - we didn't study the pattern */ source, /* the subject string */ filesize, /* the length of the subject */ start_offset, /* starting offset in the subject */ options, /* options */ ovector, /* output vector for substring information */ OVECCOUNT); /* number of elements in the output vector */ if (rc == PCRE_ERROR_NOMATCH) { if (options == 0) break; ovector[1] = start_offset + 1; continue; /* Go round the loop again */ } /* Other matching errors are not recoverable. */ if (rc > 0) { /* Matched a walk line * 0=FullString 1(2)=OID 2(4)=Type 3(6)=Value */ char *oid_str = string_at_vector(source, ovector, 2); char *type_str = string_at_vector(source, ovector, 4); char *value_str = string_at_vector(source, ovector, 6); // snmp_log(LOG_INFO, "OID='%s' TYPE='%s' VALUE='%s'\n", oid_str, type_str, value_str); /* Extract the oid from the string */ size_t oid_len; oid *oid_array = oid_from_string(oid_str, &oid_len); /* Create a value struct from the strings */ m_value *val = value_from_string(type_str, value_str); if (val) { /* Add the val to the values hashtable */ i_hashtable_key *key = m_value_key(oid_str); i_hashtable_put(m_value_ht(), key, val); i_hashtable_key_free(key); /* Add SNMP Handler for the OID */ //printf ("Registering value %s\n", oid_str); netsnmp_register_instance( netsnmp_create_handler_registration(oid_str, m_value_snmp_handler, oid_array, oid_len, HANDLER_CAN_RONLY)); } } else { /* Other matching error occurred */ snmp_log(LOG_ERR, "m_parse other matching error occurred\n"); pcre_free(re); return; } } /* Clean up */ pcre_free(re); /* Clean up */ munmap(source, filesize); close(fd); }