コード例 #1
0
ファイル: com_serv.c プロジェクト: Etienne-Breda/school
void	recv_serv(t_main *c)
{
  char	buf[BUF_SIZE + 1];
  int	len;

  memset(buf, 0, BUF_SIZE + 1);
  if ((len = recv(c->sfd, buf, BUF_SIZE, 0)) <= 0)
    disconnect(c);
  if (!add_buffer(c, buf, len))
    return ;
  c->start = 0;
  c->end = 0;
  str_clean(c->buf, strlen(c->buf));
  aff_msg(c->m, str_clean(c->buf, strlen(c->buf)));
  memset(c->buf, 0, BUF_SIZE + 3);
}
コード例 #2
0
ファイル: send.c プロジェクト: Etienne-Breda/school
int	send_split(char *buf, int fd)
{
  char	*s;
  char	*tmp;
  char	*max;
  int	res;

  res = 0;
  tmp = buf;
  max = buf + strlen(buf);
  s = str_clean(strdup(buf));
  printf("Sending to %s%d%s:\t\t%s%s%s\n",
	 BLUEG, fd, DEFAULT, GREENG, s, DEFAULT);
  while (tmp < max)
    {
      res = (int)(max - tmp) > BUF_SIZE ? BUF_SIZE
	: (int)(max - tmp) % BUF_SIZE;
      if ((res = send(fd, buf, strlen(buf), 0)) <= 0)
	{
	  fprintf(stderr, "Error while sending %s to %d\n", s, fd);
	  break;
	}
      tmp += BUF_SIZE;
    }
  free(s);
  return (res);
}
コード例 #3
0
ファイル: quicksort-test.c プロジェクト: garretraziel/guppy
int main(void)
{
    int c;
    string str;
    if(str_new(&str, 255) == 0)
        return 1;
    while((c = getchar()) != EOF) {
        if(c == '\n'){
            sort(&str);
            printf("%s\n-----\n", str.str);
            str_clean(&str);
        } else
            str_push(&str, c);
    }
    return 0;
}
コード例 #4
0
ファイル: babble_client.c プロジェクト: aumgn/Cours
static void client_console(int sock)
{
    char client_buf[BABBLE_BUFFER_SIZE];
    char *server_buf;

    char *user_buf =NULL;
    size_t user_buf_size=0;

    int cid = -1;
    int answer_expected = 0;
    
    
    while(getline(&user_buf, &user_buf_size, stdin) != -1){
        /* truncate input if need be */
        strncpy(client_buf, user_buf, BABBLE_BUFFER_SIZE);

        str_clean(client_buf);
        
        /* check command on client side */
        cid = str_to_command(client_buf, &answer_expected);
        
        if(cid == -1){
            continue;
        }
        
        if (network_send(sock, strlen(client_buf)+1,(void*) client_buf) != strlen(client_buf)+1){
            perror("ERROR writing to socket");
            break;
        }
        
        if(cid == TIMELINE){
            
            /* specific protocol for timeline request */
            int *t_length, i;
            if(network_recv(sock, (void**) &t_length) != sizeof(int)){
                perror("ERROR in timeline protocol");
                break;
            }

            printf("Timeline of size: %d\n", *t_length);

            /* recv only the last BABBLE_TIMELINE_MAX */
            int to_recv= (*t_length < BABBLE_TIMELINE_MAX)? *t_length :  BABBLE_TIMELINE_MAX;

            free(t_length);
            
            for(i=0; i< to_recv; i++){
                if(network_recv(sock, (void**) &server_buf) < 0){
                    perror("ERROR reading from socket");
                    break;
                }
                printf("%s", server_buf);
                free(server_buf);
            }

            if(i != to_recv){
                break;
            }
        }
        else{
            if(answer_expected){
                if(network_recv(sock, (void**) &server_buf) < 0){
                    perror("ERROR reading from socket");
                    break;
                }
                printf("%s", server_buf);
                free(server_buf);
            }
        }
        
    }

    printf("### Client exiting \n");
}
コード例 #5
0
ファイル: lexical.c プロジェクト: garretraziel/guppy
/** Lexikalni analyzator
 *
 * @param string slozi k navratu identifikatoru a cisel
 * vraci ciselnou reprezentaci tokenu
 */
static inline int get_token__(void)
{
    static int c;
    static int state = FSM_READ;

    int num = 0;

    // buffer se musi vyprazdnit
    str_clean(&str);

    for(;;) {

        switch(state) {
        // nacitani znaku
        case FSM_READ:
            c = fgetc(input);
        // nekdy byva potreba nacteni znaku preskocit
        case FSM_START:
            if(isspace(c)) {
                state = FSM_READ;
                if(c == '\n')
                    ++line;
            }
            else if(isalpha(c) || c == '_')
                state = FSM_IDENTIFIER;
            else if(isdigit(c))
                state = FSM_NUMBER;
            else if(c == '+') {
                state = FSM_READ;
                return PLUS;
            }
            else if(c == '*') {
                state = FSM_READ;
                return MUL;
            }
            else if(c == '/') {
                state = FSM_READ;
                return DIV;
            }
            else if(c == '.')
                state = FSM_DOT;
            else if(c == '<')
                state = FSM_LESS;
            else if(c == '>')
                state = FSM_GREAT;
            else if(c == '~')
                state = FSM_NOT_EQUALS;
            else if(c == '^') {
                state = FSM_READ;
                return POWER;
            }
            else if(c == '(') {
                state = FSM_READ;
                return LBRAC;
            }
            else if(c == ')') {
                state = FSM_READ;
                return RBRAC;
            }
            else if(c == ',') {
                state = FSM_READ;
                return COMMA;
            }
            else if(c == '-')
                state = FSM_DASH;
            else if(c == '=')
                state = FSM_EQUALS;
            else if(c == '"')
                state = FSM_STRING;
            else if(c == ';') {
                state = FSM_READ;
                return SEMICOLON;
            }
            else if(c == EOF)
                return NOTHING;
            else {
                state = FSM_READ;
                return ERROR_LEX_UX_CHAR;
            }
            break;

        case FSM_IDENTIFIER:
            str_push(&str, c);
            c = fgetc(input);
            if(! (isalnum(c) || c == '_')) {
                state = FSM_START;
                return check_keyword(&str); // kontrola klicovych slov
            }
            break;

        case FSM_NUMBER:
            str_push(&str, c);
            c = fgetc(input);
            if(isdigit(c))
                ;
            else if(c == '.')
                state = FSM_FLOAT0;
            else if(c == 'E' || c == 'e')
                state = FSM_EXP_E;
            else {
                state = FSM_START;
                return NUMBER;
            }
            break;

        case FSM_FLOAT0:
            str_push(&str, c);
            c = fgetc(input);
            if(isdigit(c))
                state = FSM_FLOAT;
            else {
                state = FSM_START;
                return ERROR_LEX_NUMBER;
            }
            break;

        case FSM_FLOAT:
            str_push(&str, c);
            c = fgetc(input);
            if(isdigit(c))
                ;
            else if(c == 'E' || c == 'e')
                state = FSM_EXP_E;
            else {
                state = FSM_START;
                return NUMBER;
            }
            break;

        case FSM_EXP_E:
            str_push(&str, c);
            c = fgetc(input);
            if(c == '+' || c == '-')
                state = FSM_EXP0;
            else if (isdigit(c))
                state = FSM_EXP;
            else {
                state = FSM_START;
                return ERROR_LEX_NUMBER;
            }
            break;

        case FSM_EXP0:
            str_push(&str, c);
            c = fgetc(input);
            if(isdigit(c))
                state = FSM_EXP;
            else {
                state = FSM_START;
                return ERROR_LEX_NUMBER;
            }
            break;


        case FSM_EXP:
            str_push(&str, c);
            c = fgetc(input);
            if(! isdigit(c)) {
                state = FSM_START;
                return NUMBER;
            }
            break;

// NOTE: Zminit v dokumentaci, ze jsme zakazali primo vkladat ridici znaky ASCII do retezcu

        case FSM_STRING:
            c = fgetc(input);
            if(c < ASCII_CONTROLL) {
                state = FSM_START;
                return ERROR_LEX_UX_CHAR;
            } else if(c == '\\')
                state = FSM_ESCAPE;
            else if(c == '"') {
                state = FSM_READ;
                return STRING;
            } else
                str_push(&str, c);
            break;

        case FSM_ESCAPE:
            c = fgetc(input);
            if(c == 'n') {
                state = FSM_STRING;
                str_push(&str, '\n');
            } else if(c == 't') {
                state = FSM_STRING;
                str_push(&str, '\t');
            } else if(c == '\\' || c == '"') {
                state = FSM_STRING;
                str_push(&str, c);
            } else if(isdigit(c))
                state = FSM_ESCAPE_NUM;
            else {
                state = FSM_START;
                return ERROR_LEX_ESC_SEC;
            }
            break;

        case FSM_ESCAPE_NUM:
            num = c - '0';
            c = fgetc(input);
            if(isdigit(c)) {
                num = num * 10 + c - '0';
                state = FSM_ESCAPE_NUM2;
            }
            else {
                state = FSM_START;
                return ERROR_LEX_ESC_SEC;
            }
            break;

        case FSM_ESCAPE_NUM2:
            c = fgetc(input);
            if(isdigit(c)) {
                num = num * 10 + c - '0';
                if(num > 0 && num < 256) {
                    str_push(&str, num);
                    state = FSM_STRING;
                } else {
                    state = FSM_START;
                    return ERROR_LEX_ESC_SEC;
                }
            } else {
                state = FSM_START;
                return ERROR_LEX_ESC_SEC;
            }
            break;

        case FSM_DASH:
            c = fgetc(input);
            if(c == '-')
                state = FSM_DASH2;
            else {
                state = FSM_START;
                return MINUS;
            }
            break;

        case FSM_DASH2:
            c = fgetc(input);
            if(c == '[')
                state = FSM_DASH2B;
            else if(c == '\n')
                state = FSM_READ;
            else
                state = FSM_COMMENT_LINE;
            break;

        case FSM_DASH2B:
            c = fgetc(input);
            if(c == '[')
                state = FSM_COMMENT_BLOCK;
            else
                state = FSM_COMMENT_LINE;
            break;

        case FSM_COMMENT_LINE:
            c = fgetc(input);
            if(c == '\n') {
                state = FSM_READ;
                ++line;
            } else if(c == EOF)
                return NOTHING;
            break;

        case FSM_COMMENT_BLOCK:
            c = fgetc(input);
            if(c == ']')
                state = FSM_COMMENT_BLOCK_END;
            else if(c == '\n')
                ++line;
            else if(c == EOF)
                return ERROR_LEX_X_CMNT_END;
            break;

        case FSM_COMMENT_BLOCK_END:
            c = fgetc(input);
            if(c == ']')
                state = FSM_READ;
            else {
                state = FSM_COMMENT_BLOCK;
                if(c == '\n')
                    ++line;
            }
            break;

        case FSM_EQUALS:
            c = fgetc(input);
            if(c == '=') {
                state = FSM_READ;
                return EQUAL;
            } else {
                state = FSM_START;
                return ASSIGN;
            }
            break;

        case FSM_DOT:
            c = fgetc(input);
            if(c == '.') {
                state = FSM_READ;
                return STRCONCAT;
            } else {
                state = FSM_START;
                return ERROR_LEX_UX_CHAR;
            }
            break;

        case FSM_LESS:
            c = fgetc(input);
            if(c == '=') {
                state = FSM_READ;
                return LESS_EQ;
            } else {
                state = FSM_START;
                return LESS;
            }
            break;

        case FSM_GREAT:
            c = fgetc(input);
            if(c == '=') {
                state = FSM_READ;
                return GREAT_EQ;
            } else {
                state = FSM_START;
                return GREAT;
            }
            break;

        case FSM_NOT_EQUALS:
            c = fgetc(input);
            if(c == '=') {
                state = FSM_READ;
                return NOT_EQUAL;
            } else {
                state = FSM_START;
                return ERROR_LEX_UX_CHAR;
            }
            break;

#ifdef DEBUG
        // konecny automat by nemel vypadnout do jineho stavu
        default:
            assert(0);
            break;
#endif
        } /* switch */
    } /* for */
}