Пример #1
0
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;
}
Пример #2
0
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();
}
Пример #3
0
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;
}
Пример #4
0
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;
}