本文整理汇总了C++中parse_line函数的典型用法代码示例。如果您正苦于以下问题:C++ parse_line函数的具体用法?C++ parse_line怎么用?C++ parse_line使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了parse_line函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sigver
static void sigver(FILE *in, FILE *out)
{
DSA *dsa=NULL;
char buf[1024];
char lbuf[1024];
unsigned char msg[1024];
char *keyword, *value;
int n=0;
int dsa2, L, N;
const EVP_MD *md = NULL;
DSA_SIG sg, *sig = &sg;
sig->r = NULL;
sig->s = NULL;
while(fgets(buf,sizeof buf,in) != NULL)
{
if (!parse_line(&keyword, &value, lbuf, buf))
{
fputs(buf,out);
continue;
}
fputs(buf,out);
if(!strcmp(keyword,"[mod"))
{
if (!parse_mod(value, &dsa2, &L, &N, &md))
{
fprintf(stderr, "Mod Parse Error\n");
exit (1);
}
if (dsa)
FIPS_dsa_free(dsa);
dsa = FIPS_dsa_new();
}
else if(!strcmp(keyword,"P"))
dsa->p=hex2bn(value);
else if(!strcmp(keyword,"Q"))
dsa->q=hex2bn(value);
else if(!strcmp(keyword,"G"))
dsa->g=hex2bn(value);
else if(!strcmp(keyword,"Msg"))
n=hex2bin(value,msg);
else if(!strcmp(keyword,"Y"))
dsa->pub_key=hex2bn(value);
else if(!strcmp(keyword,"R"))
sig->r=hex2bn(value);
else if(!strcmp(keyword,"S"))
{
EVP_MD_CTX mctx;
int r;
FIPS_md_ctx_init(&mctx);
sig->s=hex2bn(value);
FIPS_digestinit(&mctx, md);
FIPS_digestupdate(&mctx, msg, n);
no_err = 1;
r = FIPS_dsa_verify_ctx(dsa, &mctx, sig);
no_err = 0;
FIPS_md_ctx_cleanup(&mctx);
fprintf(out, "Result = %c\n\n", r == 1 ? 'P' : 'F');
}
}
}
示例2: config_parse
/* Go through the file and parse each line */
int config_parse(const char *unit,
const char *filename,
FILE *f,
const char *sections,
ConfigItemLookup lookup,
const void *table,
bool relaxed,
bool allow_include,
bool warn,
void *userdata) {
_cleanup_free_ char *section = NULL, *continuation = NULL;
_cleanup_fclose_ FILE *ours = NULL;
unsigned line = 0, section_line = 0;
bool section_ignored = false;
int r;
assert(filename);
assert(lookup);
if (!f) {
f = ours = fopen(filename, "re");
if (!f) {
/* Only log on request, except for ENOENT,
* since we return 0 to the caller. */
if (warn || errno == ENOENT)
log_full(errno == ENOENT ? LOG_DEBUG : LOG_ERR,
"Failed to open configuration file '%s': %m", filename);
return errno == ENOENT ? 0 : -errno;
}
}
fd_warn_permissions(filename, fileno(f));
while (!feof(f)) {
char l[LINE_MAX], *p, *c = NULL, *e;
bool escaped = false;
if (!fgets(l, sizeof(l), f)) {
if (feof(f))
break;
log_error_errno(errno, "Failed to read configuration file '%s': %m", filename);
return -errno;
}
truncate_nl(l);
if (continuation) {
c = strappend(continuation, l);
if (!c) {
if (warn)
log_oom();
return -ENOMEM;
}
continuation = mfree(continuation);
p = c;
} else
p = l;
for (e = p; *e; e++) {
if (escaped)
escaped = false;
else if (*e == '\\')
escaped = true;
}
if (escaped) {
*(e-1) = ' ';
if (c)
continuation = c;
else {
continuation = strdup(l);
if (!continuation) {
if (warn)
log_oom();
return -ENOMEM;
}
}
continue;
}
r = parse_line(unit,
filename,
++line,
sections,
lookup,
table,
relaxed,
allow_include,
§ion,
§ion_line,
§ion_ignored,
p,
userdata);
free(c);
//.........这里部分代码省略.........
示例3: parse_config_file
parse_code_t parse_config_file (file_option_t opts[], const char *filename)
{
unsigned int len=80;
char *line = malloc(len);
int readoffset, thischar, lineno;
FILE *file;
parse_code_t pcode;
char empty[] = "";
if (!line) {
parse_error(parse_syserr, 0, empty, empty);
return parse_syserr;
}
file = fopen (filename, "r");
if (!file) {
parse_error (parse_syserr, 0, empty, empty);
free (line);
return parse_syserr;
}
lineno = 0;
while (!feof (file)) {
lineno++;
readoffset = 0;
memset (line, 0, len);
while ((thischar = fgetc(file)) != EOF) {
if (readoffset + 1 > len) {
len *= 2;
line = realloc (line, len);
if (!line)
{
parse_error(parse_syserr, 0, empty, empty);
fclose (file);
return parse_syserr;
}
}
if (thischar == '\n') {
line[readoffset] = '\0';
break;
}
else
line[readoffset] = (unsigned char) thischar;
readoffset++;
}
pcode = parse_line (opts, line);
if (pcode != parse_ok)
if (!parse_error(pcode, lineno, filename, line)) {
free (line);
return pcode;
}
}
free (line);
return parse_ok;
}
示例4: config_parse
/* Go through the file and parse each line */
int config_parse(const char *unit,
const char *filename,
FILE *f,
const char *sections,
ConfigItemLookup lookup,
void *table,
bool relaxed,
bool allow_include,
void *userdata) {
_cleanup_free_ char *section = NULL, *continuation = NULL;
_cleanup_fclose_ FILE *ours = NULL;
unsigned line = 0, section_line = 0;
int r;
assert(filename);
assert(lookup);
if (!f) {
f = ours = fopen(filename, "re");
if (!f) {
log_error("Failed to open configuration file '%s': %m", filename);
return -errno;
}
}
fd_warn_permissions(filename, fileno(f));
while (!feof(f)) {
char l[LINE_MAX], *p, *c = NULL, *e;
bool escaped = false;
if (!fgets(l, sizeof(l), f)) {
if (feof(f))
break;
log_error("Failed to read configuration file '%s': %m", filename);
return -errno;
}
truncate_nl(l);
if (continuation) {
c = strappend(continuation, l);
if (!c)
return -ENOMEM;
free(continuation);
continuation = NULL;
p = c;
} else
p = l;
for (e = p; *e; e++) {
if (escaped)
escaped = false;
else if (*e == '\\')
escaped = true;
}
if (escaped) {
*(e-1) = ' ';
if (c)
continuation = c;
else {
continuation = strdup(l);
if (!continuation)
return -ENOMEM;
}
continue;
}
r = parse_line(unit,
filename,
++line,
sections,
lookup,
table,
relaxed,
allow_include,
§ion,
§ion_line,
p,
userdata);
free(c);
if (r < 0)
return r;
}
return 0;
}
示例5: main
int main(int argc, char * const argv[])
{
int r, c, long_optind = 0, err = 0;
char *line;
int cargc;
char *cargv[260];
sc_context_param_t ctx_param;
int lcycle = SC_CARDCTRL_LIFECYCLE_ADMIN;
printf("OpenSC Explorer version %s\n", sc_get_version());
while (1) {
c = getopt_long(argc, argv, "r:c:vwm:", options, &long_optind);
if (c == -1)
break;
if (c == '?')
util_print_usage_and_die(app_name, options, option_help);
switch (c) {
case 'r':
opt_reader = optarg;
break;
case 'c':
opt_driver = optarg;
break;
case 'w':
opt_wait = 1;
break;
case 'v':
verbose++;
break;
case 'm':
opt_startfile = optarg;
break;
}
}
memset(&ctx_param, 0, sizeof(ctx_param));
ctx_param.ver = 0;
ctx_param.app_name = app_name;
r = sc_context_create(&ctx, &ctx_param);
if (r) {
fprintf(stderr, "Failed to establish context: %s\n", sc_strerror(r));
return 1;
}
if (verbose > 1) {
ctx->debug = verbose;
ctx->debug_file = stderr;
}
if (opt_driver != NULL) {
err = sc_set_card_driver(ctx, opt_driver);
if (err) {
fprintf(stderr, "Driver '%s' not found!\n", opt_driver);
err = 1;
goto end;
}
}
err = util_connect_card(ctx, &card, opt_reader, opt_wait, 0);
if (err)
goto end;
if (opt_startfile) {
if(*opt_startfile) {
char startpath[1024];
char *args[] = { startpath };
strncpy(startpath, opt_startfile, sizeof(startpath)-1);
r = do_cd(1, args);
if (r) {
printf("unable to select file %s: %s\n",
opt_startfile, sc_strerror(r));
return -1;
}
}
} else {
sc_format_path("3F00", ¤t_path);
r = sc_select_file(card, ¤t_path, ¤t_file);
if (r) {
printf("unable to select MF: %s\n", sc_strerror(r));
return 1;
}
}
r = sc_card_ctl(card, SC_CARDCTL_LIFECYCLE_SET, &lcycle);
if (r && r != SC_ERROR_NOT_SUPPORTED)
printf("unable to change lifecycle: %s\n", sc_strerror(r));
while (1) {
struct command *cmd;
char prompt[3*SC_MAX_PATH_STRING_SIZE];
sprintf(prompt, "OpenSC [%s]> ", path_to_filename(¤t_path, '/'));
line = my_readline(prompt);
if (line == NULL)
break;
cargc = parse_line(line, cargv, DIM(cargv));
if (cargc < 1)
//.........这里部分代码省略.........
示例6: parse_one_file
void
parse_one_file(char *filename)
{
char *fieldv[MAXFIELDS];
int fieldc;
void (*f)(int c, char **v);
FILE *cf;
char line[MAXLINELEN];
snprintf(line, sizeof(line), "reading %s", filename);
status(line);
strlcpy(curfilename, filename, sizeof(curfilename));
if ((cf = fopen(curfilename, "r")) == NULL) {
warn("%s", curfilename);
goterror = 1;
return;
}
linenum = 0;
while (fgets(line, MAXLINELEN, cf) != NULL) {
linenum++;
parse_line(line, &fieldc, fieldv, MAXFIELDS);
if (fieldc < 1)
continue;
if (!strcmp(fieldv[0], "srcdirs"))
f = add_srcdirs;
else if(!strcmp(fieldv[0], "progs"))
f = add_progs;
else if(!strcmp(fieldv[0], "ln"))
f = add_link;
else if(!strcmp(fieldv[0], "libs"))
f = add_libs;
else if(!strcmp(fieldv[0], "libs_so"))
f = add_libs_so;
else if(!strcmp(fieldv[0], "buildopts"))
f = add_buildopts;
else if(!strcmp(fieldv[0], "special"))
f = add_special;
else {
warnx("%s:%d: skipping unknown command `%s'",
curfilename, linenum, fieldv[0]);
goterror = 1;
continue;
}
if (fieldc < 2) {
warnx("%s:%d: %s %s",
curfilename, linenum, fieldv[0],
"command needs at least 1 argument, skipping");
goterror = 1;
continue;
}
f(fieldc, fieldv);
}
if (ferror(cf)) {
warn("%s", curfilename);
goterror = 1;
}
fclose(cf);
}
示例7: parse_file
static errcode_t parse_file(FILE *f, struct parse_state *state,
char **ret_modspec)
{
#define BUF_SIZE 2048
char *bptr;
errcode_t retval;
bptr = malloc (BUF_SIZE);
if (!bptr)
return ENOMEM;
while (!feof(f)) {
if (fgets(bptr, BUF_SIZE, f) == NULL)
break;
#ifndef PROFILE_SUPPORTS_FOREIGN_NEWLINES
retval = parse_line(bptr, state, ret_modspec);
if (retval) {
free (bptr);
return retval;
}
#else
{
char *p, *end;
if (strlen(bptr) >= BUF_SIZE - 1) {
/* The string may have foreign newlines and
gotten chopped off on a non-newline
boundary. Seek backwards to the last known
newline. */
long offset;
char *c = bptr + strlen (bptr);
for (offset = 0; offset > -BUF_SIZE; offset--) {
if (*c == '\r' || *c == '\n') {
*c = '\0';
fseek (f, offset, SEEK_CUR);
break;
}
c--;
}
}
/* First change all newlines to \n */
for (p = bptr; *p != '\0'; p++) {
if (*p == '\r')
*p = '\n';
}
/* Then parse all lines */
p = bptr;
end = bptr + strlen (bptr);
while (p < end) {
char* newline;
char* newp;
newline = strchr (p, '\n');
if (newline != NULL)
*newline = '\0';
/* parse_line modifies contents of p */
newp = p + strlen (p) + 1;
retval = parse_line (p, state, ret_modspec);
if (retval) {
free (bptr);
return retval;
}
p = newp;
}
}
#endif
}
free (bptr);
return 0;
}
示例8: parse_log
static int
parse_log(void)
{
pkgentry_t *ent, *look;
avl_index_t where;
int num = 0;
int logfd;
struct stat stb;
int mlen = strlen(marker);
off_t realend;
ptrdiff_t off;
char *p, *q, *map;
logfd = open(PKGLOG, O_RDONLY);
if (logfd < 0) {
if (errno == ENOENT)
return (0);
progerr(gettext("cannot read "PKGLOG": %s"), strerror(errno));
exit(2);
}
if (fstat(logfd, &stb) != 0) {
progerr(gettext("cannot stat "PKGLOG": %s"), strerror(errno));
exit(2);
}
if (stb.st_size == 0) {
(void) close(logfd);
/* Force pkgdump && remove of the logfile. */
return (1);
}
map = mmap(0, stb.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE,
logfd, 0);
(void) close(logfd);
if (map == (char *)-1) {
progerr(gettext("Cannot mmap the "PKGLOG": %s"),
strerror(errno));
exit(2);
}
cind = 0;
realend = stb.st_size;
if (memcmp(map + realend - mlen, marker, mlen) != 0) {
progerr(gettext(PKGLOG" is not complete"));
map[stb.st_size - 1] = '\0'; /* for strstr() */
realend = 0;
for (p = map; q = strstr(p, marker); ) {
if (q == map || q[-1] == '\n')
realend = q - map + mlen;
p = q + mlen;
}
progerr(gettext("Ignoring %ld bytes from log"),
(long)(stb.st_size - realend));
}
for (off = 0; off < realend; off += q - p) {
p = map + off;
q = memchr(p, '\n', realend - off);
if (q == NULL)
break;
q++;
num++;
if (p[0] == '#' || p[0] == '\n') {
if (memcmp(marker, p, mlen) == 0)
cind = 0;
else
handle_comments(p, q - p);
continue;
}
ent = parse_line(p + 1, q - (p + 1) - 1, p[0] != '-');
if (ent == NULL)
continue;
look = avl_find(list, ent, &where);
/*
* The log can be replayed; so any value of "look" is
* not unexpected.
*/
switch (p[0]) {
case '+':
case '=':
if (look != NULL)
swapentry(look, ent);
else
avl_insert(list, ent, where);
break;
case '-':
if (look != NULL) {
avl_remove(list, look);
freeentry(look);
}
freeentry(ent);
break;
default:
//.........这里部分代码省略.........
示例9: parse_cmdline_options
int parse_cmdline_options (int argc, char **argv,
ogg123_options_t *ogg123_opts,
file_option_t *file_opts)
{
int option_index = 1;
ao_option *temp_options = NULL;
ao_option ** current_options = &temp_options;
ao_info *info;
int temp_driver_id = -1;
audio_device_t *current;
int ret;
while (-1 != (ret = getopt_long(argc, argv, "b:c::d:f:hl:k:K:o:p:qvVx:y:[email protected]:",
long_options, &option_index))) {
switch (ret) {
case 0:
if(!strcmp(long_options[option_index].name, "audio-buffer")) {
ogg123_opts->buffer_size = 1024 * atoi(optarg);
} else {
status_error(_("Internal error parsing command line options.\n"));
exit(1);
}
break;
case 'b':
ogg123_opts->input_buffer_size = atoi(optarg) * 1024;
if (ogg123_opts->input_buffer_size < MIN_INPUT_BUFFER_SIZE * 1024) {
status_error(_("Input buffer size smaller than minimum size of %dkB."),
MIN_INPUT_BUFFER_SIZE);
ogg123_opts->input_buffer_size = MIN_INPUT_BUFFER_SIZE * 1024;
}
break;
case 'c':
if (optarg) {
char *tmp = strdup (optarg);
parse_code_t pcode = parse_line(file_opts, tmp);
if (pcode != parse_ok)
status_error(_("=== Error \"%s\" while parsing config option from command line.\n"
"=== Option was: %s\n"),
parse_error_string(pcode), optarg);
free (tmp);
}
else {
/* not using the status interface here */
fprintf (stdout, _("Available options:\n"));
file_options_describe(file_opts, stdout);
exit (0);
}
break;
case 'd':
temp_driver_id = ao_driver_id(optarg);
if (temp_driver_id < 0) {
status_error(_("=== No such device %s.\n"), optarg);
exit(1);
}
current = append_audio_device(ogg123_opts->devices,
temp_driver_id,
NULL, NULL);
if(ogg123_opts->devices == NULL)
ogg123_opts->devices = current;
current_options = ¤t->options;
break;
case 'f':
if (temp_driver_id >= 0) {
info = ao_driver_info(temp_driver_id);
if (info->type == AO_TYPE_FILE) {
free(current->filename);
current->filename = strdup(optarg);
} else {
status_error(_("=== Driver %s is not a file output driver.\n"),
info->short_name);
exit(1);
}
} else {
status_error(_("=== Cannot specify output file without specifying a driver.\n"));
exit (1);
}
break;
case 'k':
ogg123_opts->seekpos = strtotime(optarg);
break;
case 'K':
ogg123_opts->endpos = strtotime(optarg);
break;
case 'l':
ogg123_opts->delay = atoi(optarg);
break;
case 'o':
if (optarg && !add_ao_option(current_options, optarg)) {
status_error(_("=== Incorrect option format: %s.\n"), optarg);
//.........这里部分代码省略.........
示例10: loadfile
static int loadfile(struct sr_input *in, const char *filename)
{
int res;
struct context *ctx;
struct sr_datafeed_packet packet;
struct sr_datafeed_meta meta;
struct sr_config *cfg;
GIOStatus status;
gboolean read_new_line;
gsize term_pos;
char **columns;
gsize num_columns;
int max_columns;
(void)filename;
ctx = in->internal;
/* Send header packet to the session bus. */
std_session_send_df_header(in->sdi, LOG_PREFIX);
if (ctx->samplerate) {
packet.type = SR_DF_META;
packet.payload = &meta;
cfg = sr_config_new(SR_CONF_SAMPLERATE,
g_variant_new_uint64(ctx->samplerate));
meta.config = g_slist_append(NULL, cfg);
sr_session_send(in->sdi, &packet);
sr_config_free(cfg);
}
read_new_line = FALSE;
/* Limit the number of columns to parse. */
if (ctx->multi_column_mode)
max_columns = ctx->num_probes;
else
max_columns = 1;
while (TRUE) {
/*
* Skip reading a new line for the first time if the last read
* line was not a header because the sample data is not parsed
* yet.
*/
if (read_new_line || ctx->header) {
ctx->line_number++;
status = g_io_channel_read_line_string(ctx->channel,
ctx->buffer, &term_pos, NULL);
if (status == G_IO_STATUS_EOF)
break;
if (status != G_IO_STATUS_NORMAL) {
sr_err("Error while reading line %zu.",
ctx->line_number);
free_context(ctx);
return SR_ERR;
}
/* Remove line termination character(s). */
g_string_truncate(ctx->buffer, term_pos);
}
read_new_line = TRUE;
if (!ctx->buffer->len) {
sr_spew("Blank line %zu skipped.", ctx->line_number);
continue;
}
/* Remove trailing comment. */
strip_comment(ctx->buffer, ctx->comment);
if (!ctx->buffer->len) {
sr_spew("Comment-only line %zu skipped.",
ctx->line_number);
continue;
}
if (!(columns = parse_line(ctx, max_columns))) {
sr_err("Error while parsing line %zu.",
ctx->line_number);
free_context(ctx);
return SR_ERR;
}
num_columns = g_strv_length(columns);
/* Ensure that the first column is not out of bounds. */
if (!num_columns) {
sr_err("Column %zu in line %zu is out of bounds.",
ctx->first_column, ctx->line_number);
g_strfreev(columns);
free_context(ctx);
return SR_ERR;
}
/*
* Ensure that the number of probes does not exceed the number
//.........这里部分代码省略.........
示例11: parse_contents
static void
parse_contents(void)
{
int cnt;
pkgentry_t *ent, *e2;
avl_index_t where;
int num = 0;
struct stat stb;
ptrdiff_t off;
char *p, *q, *map;
pkgentry_t *lastentry = NULL;
int d;
int cntserrs = 0;
cnt = open(CONTENTS, O_RDONLY);
cind = 0;
if (cnt == -1) {
if (errno == ENOENT)
return;
exit(99);
}
if (fstat(cnt, &stb) != 0) {
(void) close(cnt);
exit(99);
}
if (stb.st_size == 0) {
(void) close(cnt);
return;
}
map = mmap(0, stb.st_size, PROT_READ, MAP_PRIVATE, cnt, 0);
(void) close(cnt);
if (map == (char *)-1)
return;
(void) madvise(map, stb.st_size, MADV_WILLNEED);
for (off = 0; off < stb.st_size; off += q - p) {
p = map + off;
q = memchr(p, '\n', stb.st_size - off);
if (q == NULL)
break;
q++;
num++;
if (p[0] == '#' || p[0] == '\n') {
handle_comments(p, q - p);
continue;
}
ent = parse_line(p, q - p - 1, B_TRUE);
if (ent == NULL) {
cntserrs++;
continue;
}
/*
* We save time by assuming the database is sorted; by
* using avl_insert_here(), building the tree is nearly free.
* lastentry always contains the last entry in the AVL tree.
*/
if (lastentry == NULL) {
avl_add(list, ent);
lastentry = ent;
} else if ((d = avlcmp(ent, lastentry)) == 1) {
avl_insert_here(list, ent, lastentry, AVL_AFTER);
lastentry = ent;
} else if (d == 0 ||
(e2 = avl_find(list, ent, &where)) != NULL) {
/*
* This can only happen if the contents file is bad;
* this can, e.g., happen with the old SQL contents DB,
* it didn't sort properly. Assume the first one
* is the correct one, but who knows?
*/
if (d == 0)
e2 = lastentry;
if (strcmp(ent->line, e2->line) != 0) {
progerr(gettext("two entries for %.*s"),
ent->pathlen, ent->line);
cntserrs++;
}
freeentry(ent);
} else {
/* Out of order: not an error for us, really. */
progerr(gettext("bad read of contents file"));
logerr(gettext("pathname: Unknown"));
logerr(gettext(
"problem: unable to read pathname field"));
if (one_shot)
exit(2);
avl_insert(list, ent, where);
}
}
cind = 0;
//.........这里部分代码省略.........
示例12: init
//.........这里部分代码省略.........
if (status != G_IO_STATUS_NORMAL) {
sr_err("Error while reading line %zu.",
ctx->line_number);
free_context(ctx);
return SR_ERR;
}
if (ctx->start_line > ctx->line_number) {
sr_spew("Line %zu skipped.", ctx->line_number);
continue;
}
/* Remove line termination character(s). */
g_string_truncate(ctx->buffer, term_pos);
if (!ctx->buffer->len) {
sr_spew("Blank line %zu skipped.", ctx->line_number);
continue;
}
/* Remove trailing comment. */
strip_comment(ctx->buffer, ctx->comment);
if (ctx->buffer->len)
break;
sr_spew("Comment-only line %zu skipped.", ctx->line_number);
}
/*
* In order to determine the number of columns parse the current line
* without limiting the number of columns.
*/
if (!(columns = parse_line(ctx, -1))) {
sr_err("Error while parsing line %zu.", ctx->line_number);
free_context(ctx);
return SR_ERR;
}
num_columns = g_strv_length(columns);
/* Ensure that the first column is not out of bounds. */
if (!num_columns) {
sr_err("Column %zu in line %zu is out of bounds.",
ctx->first_column, ctx->line_number);
g_strfreev(columns);
free_context(ctx);
return SR_ERR;
}
if (ctx->multi_column_mode) {
/*
* Detect the number of probes in multi column mode
* automatically if not specified.
*/
if (!ctx->num_probes) {
ctx->num_probes = num_columns;
sr_info("Number of auto-detected probes: %zu.",
ctx->num_probes);
}
/*
* Ensure that the number of probes does not exceed the number
* of columns in multi column mode.
*/
if (num_columns < ctx->num_probes) {
示例13: builtin_run_command
/****************************************************************************
* returns:
* 1 - command executed, repeatable
* 0 - command executed but not repeatable, interrupted commands are
* always considered not repeatable
* -1 - not executed (unrecognized, bootd recursion or too many args)
* (If cmd is NULL or "" or longer than CONFIG_SYS_CBSIZE-1 it is
* considered unrecognized)
*
* WARNING:
*
* We must create a temporary copy of the command since the command we get
* may be the result from getenv(), which returns a pointer directly to
* the environment data, which may change magicly when the command we run
* creates or modifies environment variables (like "bootp" does).
*/
static int builtin_run_command(const char *cmd, int flag)
{
char cmdbuf[CONFIG_SYS_CBSIZE]; /* working copy of cmd */
char *token; /* start of token in cmdbuf */
char *sep; /* end of token (separator) in cmdbuf */
char finaltoken[CONFIG_SYS_CBSIZE];
char *str = cmdbuf;
char *argv[CONFIG_SYS_MAXARGS + 1]; /* NULL terminated */
int argc, inquotes;
int repeatable = 1;
int rc = 0;
debug_parser("[RUN_COMMAND] cmd[%p]=\"", cmd);
if (DEBUG_PARSER) {
/* use printf - string may be loooong */
printf(cmd ? cmd : "NULL");
printf("\"\n");
}
//clear_ctrlc(); /* forget any previous Control C */
if (!cmd || !*cmd) {
return -1; /* empty command */
}
if (strlen(cmd) >= CONFIG_SYS_CBSIZE) {
printf ("## Command too long!\n");
return -1;
}
strcpy (cmdbuf, cmd);
/* Process separators and check for invalid
* repeatable commands
*/
debug_parser("[PROCESS_SEPARATORS] %s\n", cmd);
while (*str) {
/*
* Find separator, or string end
* Allow simple escape of ';' by writing "\;"
*/
for (inquotes = 0, sep = str; *sep; sep++) {
if ((*sep=='\'') &&
(*(sep-1) != '\\'))
inquotes=!inquotes;
if (!inquotes &&
(*sep == ';') && /* separator */
( sep != str) && /* past string start */
(*(sep-1) != '\\')) /* and NOT escaped */
break;
}
/*
* Limit the token to data between separators
*/
token = str;
if (*sep) {
str = sep + 1; /* start of command for next pass */
*sep = '\0';
}
else
str = sep; /* no more commands for next pass */
debug_parser("token: \"%s\"\n", token);
/* find macros in this token and replace them */
process_macros (token, finaltoken);
/* Extract arguments */
if ((argc = parse_line (finaltoken, argv)) == 0) {
rc = -1; /* no command at all */
continue;
}
if (cmd_process(flag, argc, argv, &repeatable, NULL))
rc = -1;
/* Did the user stop this? */
//if (had_ctrlc ())
// return -1; /* if stopped then not repeatable */
}
return rc ? rc : repeatable;
//.........这里部分代码省略.........
示例14: run_command
int run_command(const char *cmd)
{
char cmdbuf[CONFIG_CBSIZE]; /* working copy of cmd */
char *token; /* start of token in cmdbuf */
char *sep; /* end of token (separator) in cmdbuf */
char finaltoken[CONFIG_CBSIZE];
char *str = cmdbuf;
char *argv[CONFIG_MAXARGS + 1]; /* NULL terminated */
int argc, inquotes;
int rc = 0;
#ifdef DEBUG
pr_debug("[RUN_COMMAND] cmd[%p]=\"", cmd);
puts (cmd ? cmd : "NULL"); /* use puts - string may be loooong */
puts ("\"\n");
#endif
if (!cmd || !*cmd) {
return -1; /* empty command */
}
if (strlen(cmd) >= CONFIG_CBSIZE) {
puts ("## Command too long!\n");
return -1;
}
strcpy (cmdbuf, cmd);
/*
* Process separators and check for invalid
* repeatable commands
*/
pr_debug("[PROCESS_SEPARATORS] %s\n", cmd);
while (*str) {
/*
* Find separator, or string end
* Allow simple escape of ';' by writing "\;"
*/
for (inquotes = 0, sep = str; *sep; sep++) {
if ((*sep=='\'') &&
(*(sep-1) != '\\'))
inquotes=!inquotes;
if (!inquotes &&
(*sep == ';') && /* separator */
( sep != str) && /* past string start */
(*(sep-1) != '\\')) /* and NOT escaped */
break;
}
/*
* Limit the token to data between separators
*/
token = str;
if (*sep) {
str = sep + 1; /* start of command for next pass */
*sep = '\0';
}
else {
str = sep; /* no more commands for next pass */
}
pr_debug("token: \"%s\"\n", token);
/* find macros in this token and replace them */
process_macros (token, finaltoken);
/* Extract arguments */
if ((argc = parse_line (finaltoken, argv)) == 0) {
rc = -1; /* no command at all */
continue;
}
if (execute_command(argc, argv) != COMMAND_SUCCESS)
rc = -1;
}
return rc;
}
示例15: parse_file
/*
* Parse a single file
*/
static int parse_file(char *filename)
{
int val;
int ret = OMPI_SUCCESS;
bool showed_no_section_warning = false;
bool showed_unexpected_tokens_warning = false;
parsed_section_values_t section;
reset_section(false, §ion);
/* Open the file */
ini_filename = filename;
btl_openib_ini_yyin = fopen(filename, "r");
if (NULL == btl_openib_ini_yyin) {
orte_show_help("help-mpi-btl-openib.txt", "ini file:file not found",
true, filename);
ret = OMPI_ERR_NOT_FOUND;
goto cleanup;
}
/* Do the parsing */
btl_openib_ini_parse_done = false;
btl_openib_ini_yynewlines = 1;
btl_openib_ini_init_buffer(btl_openib_ini_yyin);
while (!btl_openib_ini_parse_done) {
val = btl_openib_ini_yylex();
switch (val) {
case BTL_OPENIB_INI_PARSE_DONE:
/* This will also set btl_openib_ini_parse_done to true, so just
break here */
break;
case BTL_OPENIB_INI_PARSE_NEWLINE:
/* blank line! ignore it */
break;
case BTL_OPENIB_INI_PARSE_SECTION:
/* We're starting a new section; if we have previously
parsed a section, go see if we can use its values. */
save_section(§ion);
reset_section(true, §ion);
section.name = strdup(btl_openib_ini_yytext);
break;
case BTL_OPENIB_INI_PARSE_SINGLE_WORD:
if (NULL == section.name) {
/* Warn that there is no current section, and ignore
this parameter */
if (!showed_no_section_warning) {
show_help("ini file:not in a section");
showed_no_section_warning = true;
}
/* Parse it and then dump it */
parse_line(§ion);
reset_section(true, §ion);
} else {
parse_line(§ion);
}
break;
default:
/* anything else is an error */
if (!showed_unexpected_tokens_warning) {
show_help("ini file:unexpected token");
showed_unexpected_tokens_warning = true;
}
break;
}
}
save_section(§ion);
fclose(btl_openib_ini_yyin);
btl_openib_ini_yylex_destroy ();
cleanup:
reset_section(true, §ion);
if (NULL != key_buffer) {
free(key_buffer);
key_buffer = NULL;
key_buffer_len = 0;
}
return ret;
}