static huft_code peek_bits(gunzip_t *guz, huft_bits n) { huft_code r; while (guz->bufbits < (n)) { guz->bitbuf |= ((ulong)get_uchar(guz)) << guz->bufbits; guz->bufbits += 8; } r = guz->bitbuf & mask_bits[n]; return r; }
void init_user_info() { struct passwd *uinfo; uinfo = getpwuid(getuid()); uname = uinfo->pw_name; upath = uinfo->pw_dir; uhost = (char*)malloc(HOSTLEN * sizeof(char)); gethostname(uhost, HOSTLEN); get_shost(); get_uchar(); }
bool valtostr(const value_t * val, char *str, size_t n) { char buf[128]; int max_bytes = 0; bool print_as_unsigned = false; #define FLAG_MACRO(bytes, string) (val->flags.u##bytes##b && val->flags.s##bytes##b) ? (string " ") : (val->flags.u##bytes##b) ? (string "u ") : (val->flags.s##bytes##b) ? (string "s ") : "" /* set the flags */ snprintf(buf, sizeof(buf), "[%s%s%s%s%s%s%s]", FLAG_MACRO(64, "I64"), FLAG_MACRO(32, "I32"), FLAG_MACRO(16, "I16"), FLAG_MACRO(8, "I8"), val->flags.f64b ? "F64 " : "", val->flags.f32b ? "F32 " : "", (val->flags.ineq_reverse && !val->flags.ineq_forwards) ? "(reversed inequality) " : ""); if (val->flags.u64b) { max_bytes = 8; print_as_unsigned = true; } else if (val->flags.s64b) { max_bytes = 8; print_as_unsigned = false; } else if (val->flags.u32b) { max_bytes = 4; print_as_unsigned = true; } else if (val->flags.s32b) { max_bytes = 4; print_as_unsigned = false; } else if (val->flags.u16b) { max_bytes = 2; print_as_unsigned = true; } else if (val->flags.s16b) { max_bytes = 2; print_as_unsigned = false; } else if (val->flags.u8b ) { max_bytes = 1; print_as_unsigned = true; } else if (val->flags.s8b ) { max_bytes = 1; print_as_unsigned = false; } /* find the right format, considering different integer size implementations */ if (max_bytes == sizeof(long long)) snprintf(str, n, print_as_unsigned ? "%llu, %s" : "%lld, %s", print_as_unsigned ? get_ulonglong(val) : get_slonglong(val), buf); else if (max_bytes == sizeof(long)) snprintf(str, n, print_as_unsigned ? "%lu, %s" : "%ld, %s" , print_as_unsigned ? get_ulong(val) : get_slong(val), buf); else if (max_bytes == sizeof(int)) snprintf(str, n, print_as_unsigned ? "%u, %s" : "%d, %s" , print_as_unsigned ? get_uint(val) : get_sint(val), buf); else if (max_bytes == sizeof(short)) snprintf(str, n, print_as_unsigned ? "%hu, %s" : "%hd, %s" , print_as_unsigned ? get_ushort(val) : get_sshort(val), buf); else if (max_bytes == sizeof(char)) snprintf(str, n, print_as_unsigned ? "%hhu, %s" : "%hhd, %s", print_as_unsigned ? get_uchar(val) : get_schar(val), buf); else if (val->flags.f64b) snprintf(str, n, "%lf, %s", get_f64b(val), buf); else if (val->flags.f32b) snprintf(str, n, "%f, %s", get_f32b(val), buf); else { snprintf(str, n, "%#llx?, %s", get_slonglong(val), buf); return false; } return true; }
int read_config(sys_data_t *sys, char *config_file, int print_version) { FILE *f = fopen(config_file, "r"); int line; unsigned int val; char buf[MAX_CONFIG_LINE]; const char *tok; char *tokptr; int err = 0; const char *errstr; if (!f) { fprintf(stderr, "Unable to open configuration file '%s'\n", config_file); return -1; } line = 0; while (fgets(buf, sizeof(buf), f) != NULL) { line++; tok = mystrtok(buf, " \t\n", &tokptr); if (!tok || (tok[0] == '#')) continue; if (strcmp(tok, "define") == 0) { const char *varname, *value; varname = mystrtok(NULL, " \t\n", &tokptr); if (!varname) { err = EINVAL; errstr = "No variable supplied for define"; goto next; } err = get_delim_str(&tokptr, &value, &errstr); if (err) goto next; err = add_variable(varname, value); if (err) { err = ENOMEM; errstr = "Out of memory"; goto next; } } else if (strcmp(tok, "loadlib") == 0) { const char *library = NULL, *initstr = NULL; struct dliblist *dlib, *dlibp; err = get_delim_str(&tokptr, &library, &errstr); if (!err) err = get_delim_str(&tokptr, &initstr, &errstr); if (!err) { dlib = malloc(sizeof(*dlib)); if (!dlib) { err = ENOMEM; errstr = "Out of memory"; } else { dlib->file = library; dlib->init = initstr; dlib->next = NULL; if (!dlibs) { dlibs = dlib; } else { dlibp = dlibs; while (dlibp->next) dlibp = dlibp->next; dlibp->next = dlib; } } } if (err) { if (library) free((char *) library); if (initstr) free((char *) initstr); } goto next; } if (print_version) goto next; if (strcmp(tok, "startlan") == 0) { err = get_uint(&tokptr, &val, &errstr); if (!err && (val >= IPMI_MAX_CHANNELS)) { err = -1; errstr = "Channel number out of range"; } if (!err) { err = lanserv_read_config(sys, f, &line, val); } } else if (strcmp(tok, "user") == 0) { err = get_user(&tokptr, sys, &errstr); } else if (strcmp(tok, "serial") == 0) { err = serserv_read_config(&tokptr, sys, &errstr); } else if (strcmp(tok, "sol") == 0) { err = sol_read_config(&tokptr, sys, &errstr); } else if (strcmp(tok, "chassis_control") == 0) { const char *prog; err = get_delim_str(&tokptr, &prog, &errstr); if (!err) ipmi_set_chassis_control_prog(sys->mc, prog); } else if (strcmp(tok, "name") == 0) { err = get_delim_str(&tokptr, &sys->name, &errstr); } else if (strcmp(tok, "startcmd") == 0) { err = get_delim_str(&tokptr, &sys->startcmd->startcmd, &errstr); } else if (strcmp(tok, "startnow") == 0) { err = get_bool(&tokptr, &sys->startcmd->startnow, &errstr); } else if (strcmp(tok, "poweroff_wait") == 0) { err = get_uint(&tokptr, &sys->startcmd->poweroff_wait_time, &errstr); } else if (strcmp(tok, "kill_wait") == 0) { err = get_uint(&tokptr, &sys->startcmd->kill_wait_time, &errstr); } else if (strcmp(tok, "set_working_mc") == 0) { unsigned char ipmb; err = get_uchar(&tokptr, &ipmb, &errstr); if (!err) { lmc_data_t *mc; err = ipmi_mc_alloc_unconfigured(sys, ipmb, &mc); if (err == ENOMEM) { errstr = "Out of memory"; err = -1; } else if (err) { errstr = "Invalid IPMB specified"; err = -1; } else { sys->mc = mc; sys->cusers = ipmi_mc_get_users(mc); sys->chan_set = ipmi_mc_get_channelset(mc); sys->cpef = ipmi_mc_get_pef(mc); sys->startcmd = ipmi_mc_get_startcmdinfo(mc); sys->sol = ipmi_mc_get_sol(mc); } } } else if (strcmp(tok, "console") == 0) { err = get_sock_addr(&tokptr, &sys->console_addr, &sys->console_addr_len, NULL, SOCK_STREAM, &errstr); } else { errstr = "Invalid configuration option"; err = -1; } next: if (err) { fprintf(stderr, "Error on line %d: %s\n", line, errstr); break; } } fclose(f); if (print_version) load_dynamic_libs(sys, print_version); return err; }