예제 #1
0
파일: server.c 프로젝트: sjclijie/KB-PM
int parse_process_and_process_type(char *buffer, process_s *process)
{
    int id, i;
    /*check out TYPE_ID.*/
    if ((id = get_process_id(buffer)) != -1)
    {
        *process = process_list[id];
        return TYPE_ID;
    }

    /*check out TYPE_APP_NAME.*/
    for(i = 0; i < process_count; i++)
    {
        if(strcmp(process_list[i].app_name, buffer) == 0)
        {
            *process = process_list[i];
            return TYPE_APP_NAME;
        }
    }

    /*check out TYPE_CMD.*/
    if(parse_process(process, buffer) == -1)
    {
        return TYPE_ERR;
    }
    return TYPE_CMD;
}
예제 #2
0
파일: ll2_parser.c 프로젝트: dkudrow/cs267
/* processes -> process ['||' process] */
void parse_processes(ast_node* program) {
  ast_node* block;
  do {
    block = ast_push_proc(program);
    parse_process(block);
    program->id = (program->id < stat_count ? stat_count : program->id);
    stat_count = 1;
  } while (match(T_CONCUR, T_UNDEF));
  expect(T_EOF);
}
예제 #3
0
파일: procmod.cpp 프로젝트: jamella/DECAF
void handle_guest_message(const char *message)
{
	fprintf(guestlog, "%s\n", message);
        switch (message[0]) {
        case 'P':
                parse_process(message);
                break;
        case 'M':
                parse_module(message);
                break;
        case 'F':
                parse_function(message);
                break;
        }
}
예제 #4
0
파일: detector.c 프로젝트: ducdung/Detector
/*!
 * Parse the message from guest system to extract OS-level semantics.
 * What the f**k does it actually do ?
 */
void detector_guest_message(char * message)
{
	switch (message[0]) {
		case 'P':
			// An internal function.  Don't know about it
			parse_process( message );
			break;
		case 'M':
			// Again
			parse_module( message );
			break;
		default:
			// Which message is it ?
			fprintf(loghandle, "Unknown message: %s\n", message);
			break;
	}
}
예제 #5
0
파일: proc.c 프로젝트: vslm698/memuse
void parse_proc(void)
{
	DIR *dir;
	struct dirent *ent;

	dir = opendir("/proc");
	if (!dir) {
		fprintf(stderr, _("Failed to open /proc!\n"));
		return;
	}
	do {
		uint64_t tmp;
		ent = readdir(dir);
		if (!ent)
			break;
		tmp = strtoull(ent->d_name, NULL, 10);
		if (tmp > 0)
			parse_process(tmp);
	} while (1);

	closedir(dir);
}
예제 #6
0
static char*
parse_buf(pTHX_ PSTATE* p_state, char *beg, char *end, U32 utf8, SV* self)
{
    char *s = beg;
    char *t = beg;
    char *new_pos;

    while (!p_state->eof) {
	/*
	 * At the start of this loop we will always be ready for eating text
	 * or a new tag.  We will never be inside some tag.  The 't' points
	 * to where we started and the 's' is advanced as we go.
	 */

	while (p_state->literal_mode) {
	    char *l = p_state->literal_mode;
	    bool skip_quoted_end = (strEQ(l, "script") || strEQ(l, "style"));
	    char inside_quote = 0;
	    bool escape_next = 0;
	    char *end_text;

	    while (s < end) {
		if (*s == '<' && !inside_quote)
		    break;
		if (skip_quoted_end) {
		    if (escape_next) {
			escape_next = 0;
		    }
		    else {
			if (*s == '\\')
			    escape_next = 1;
			else if (inside_quote && *s == inside_quote)
			    inside_quote = 0;
			else if (*s == '\r' || *s == '\n')
			    inside_quote = 0;
			else if (!inside_quote && (*s == '"' || *s == '\''))
			    inside_quote = *s;
		    }
		}
		s++;
	    }

	    if (s == end) {
		s = t;
		goto DONE;
	    }

	    end_text = s;
	    s++;
      
	    /* here we rely on '\0' termination of perl svpv buffers */
	    if (*s == '/') {
		s++;
		while (*l && toLOWER(*s) == *l) {
		    s++;
		    l++;
		}

		if (!*l && (strNE(p_state->literal_mode, "plaintext") || p_state->closing_plaintext)) {
		    /* matched it all */
		    token_pos_t end_token;
		    end_token.beg = end_text + 2;
		    end_token.end = s;

		    while (isHSPACE(*s))
			s++;
		    if (*s == '>') {
			s++;
			if (t != end_text)
			    report_event(p_state, E_TEXT, t, end_text, utf8,
					 0, 0, self);
			report_event(p_state, E_END,  end_text, s, utf8,
				     &end_token, 1, self);
			p_state->literal_mode = 0;
			p_state->is_cdata = 0;
			t = s;
		    }
		}
	    }
	}

#ifdef MARKED_SECTION
	while (p_state->ms == MS_CDATA || p_state->ms == MS_RCDATA) {
	    while (s < end && *s != ']')
		s++;
	    if (*s == ']') {
		char *end_text = s;
		s++;
		if (*s == ']') {
		    s++;
		    if (*s == '>') {
			s++;
			/* marked section end */
			if (t != end_text)
			    report_event(p_state, E_TEXT, t, end_text, utf8,
					 0, 0, self);
			report_event(p_state, E_NONE, end_text, s, utf8, 0, 0, self);
			t = s;
			SvREFCNT_dec(av_pop(p_state->ms_stack));
			marked_section_update(p_state);
			continue;
		    }
		}
	    }
	    if (s == end) {
		s = t;
		goto DONE;
	    }
	}
#endif

	/* first we try to match as much text as possible */
	while (s < end && *s != '<') {
#ifdef MARKED_SECTION
	    if (p_state->ms && *s == ']') {
		char *end_text = s;
		s++;
		if (*s == ']') {
		    s++;
		    if (*s == '>') {
			s++;
			report_event(p_state, E_TEXT, t, end_text, utf8,
				     0, 0, self);
			report_event(p_state, E_NONE, end_text, s, utf8,
				     0, 0, self);
			t = s;
			SvREFCNT_dec(av_pop(p_state->ms_stack));
			marked_section_update(p_state);    
			continue;
		    }
		}
	    }
#endif
	    s++;
	}
	if (s != t) {
	    if (*s == '<') {
		report_event(p_state, E_TEXT, t, s, utf8, 0, 0, self);
		t = s;
	    }
	    else {
		s--;
		if (isHSPACE(*s)) {
		    /* wait with white space at end */
		    while (s >= t && isHSPACE(*s))
			s--;
		}
		else {
		    /* might be a chopped up entities/words */
		    while (s >= t && !isHSPACE(*s))
			s--;
		    while (s >= t && isHSPACE(*s))
			s--;
		}
		s++;
		if (s != t)
		    report_event(p_state, E_TEXT, t, s, utf8, 0, 0, self);
		break;
	    }
	}

	if (end - s < 3)
	    break;

	/* next char is known to be '<' and pointed to by 't' as well as 's' */
	s++;

#ifdef USE_PFUNC
	new_pos = parsefunc[(unsigned char)*s](p_state, t, end, utf8, self);
#else
	if (isHNAME_FIRST(*s))
	    new_pos = parse_start(p_state, t, end, utf8, self);
	else if (*s == '/')
	    new_pos = parse_end(p_state, t, end, utf8, self);
	else if (*s == '!')
	    new_pos = parse_decl(p_state, t, end, utf8, self);
	else if (*s == '?')
	    new_pos = parse_process(p_state, t, end, utf8, self);
	else
	    new_pos = 0;
#endif /* USE_PFUNC */

	if (new_pos) {
	    if (new_pos == t) {
		/* no progress, need more data to know what it is */
		s = t;
		break;
	    }
	    t = s = new_pos;
	}

	/* if we get out here then this was not a conforming tag, so
	 * treat it is plain text at the top of the loop again (we
	 * have already skipped past the "<").
	 */
    }

DONE:
    return s;

}