Beispiel #1
0
ssize_t ircsock_read(IRCSock *ircsock) { /*{{{*/
	/* We must have enough space for the newline and null character */
	char buf[BCSIZE + 2];
	ssize_t ramount;
	char *str, *tok;

	ramount = read(ircsock->socket, buf, BCSIZE);
	if(ramount > 0) {
		buf[ramount] = '\n';
		buf[ramount + 1] = '\0';
		tok = strtok(buf, "\r\n");
		while(tok != NULL) {
			str = malloc(strlen(tok) + 1);
			if(!str) {
				fprintf(stderr, "Failed to allocate memory in ircsock_read!\n");
				return IRCSOCK_MERROR;
			}
			strcpy(str, tok);

			cbuffer_push(ircsock->cbuf, str);
			tok = strtok(NULL, "\r\n");
		}
	}
	return ramount;
} /*}}}*/
Beispiel #2
0
int main(void) {
	struct cbuffer_t *cbuffer;
	uint8_t *message;
	uint8_t FLloop, len, i;
	char rxc;

	FLloop=TRUE;
	cbuffer = cbuffer_init();
	message = malloc(MSG_SIZE);

	printf("\nTest circular buffer.\n");
	printf("Copyright (C) 2016 Enrico Rossi - GNU GPL\n");

	help();

	while (FLloop) {
		/* get the char */
		rxc = getchar();

		switch(rxc) {
			case 'g':
				len = cbuffer_pop(cbuffer, message, MSG_SIZE);

				if (len) {
					printf("> Data fetched: %d\n", len);

					for (i=0; i < len; i++)
						printf("%c", *(message + i));

					printf("\n");
				} else {
					printf("> No data\n");
				}

				printit(cbuffer);
				break;
			case 'h':
				help();
				break;
			case 'q':
				FLloop=FALSE;
				break;
			case 'c':
				cbuffer_clear(cbuffer);
				printit(cbuffer);
				break;
			case '\n':
				break;
			default:
				rxc = 'a' + cbuffer->idx;
				cbuffer_push(cbuffer, rxc);
				printit(cbuffer);
		}
	}

	free(message);
	cbuffer_shut(cbuffer);
	return(0);
}