Compare commits

...
Sign in to create a new pull request.

7 commits

Author SHA1 Message Date
Juri Glass
550aa82162 Merge pull request #4 from dapaulid/master
Fixed endianness bug in sml_number_init
2012-08-09 02:33:08 -07:00
dapaulid
52a967db1f Fixed endianness bug in sml_number_init - revised 2012-08-07 16:35:27 +02:00
dapaulid
bff3552911 Fixed endianness bug in sml_number_init 2012-08-07 14:30:18 +02:00
Juri Glass
c0fc353932 added newline to error msg 2012-07-11 17:31:16 +02:00
Juri Glass
bc114cca64 merged transport_rework 2012-07-11 17:30:19 +02:00
Juri Glass
4781a2f25d size_t is unsigned 2012-07-11 17:12:05 +02:00
Juri Glass
5ee449d30e added newline to error msg 2012-06-27 13:49:39 +02:00
2 changed files with 13 additions and 91 deletions

View file

@ -28,9 +28,18 @@ int sml_number_endian();
void sml_number_byte_swap(unsigned char *bytes, int bytes_len);
void *sml_number_init(u64 number, unsigned char type, int size) {
unsigned char* bytes = (unsigned char*)&number;
// Swap bytes of big-endian number so that
// memcpy copies the right part
if (sml_number_endian() == SML_BIG_ENDIAN) {
bytes += sizeof(u64) - size;
}
unsigned char *np = malloc(size);
memset(np, 0, size);
memcpy(np, &number, size);
memcpy(np, bytes, size);
return np;
}

View file

@ -92,104 +92,17 @@ size_t sml_transport_read(int fd, unsigned char *buffer, size_t max_len) {
}
else {
// dont read other escaped sequences yet
printf("error: unrecognized sequence");
return -1;
printf("error: unrecognized sequence\n");
return 0;
}
}
len += 4;
}
return -1;
return 0;
}
/*
size_t sml_transport_read(int fd, unsigned char *buffer, size_t max_len) {
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
unsigned char byte;
unsigned char buf[max_len];
int esc = 0, start = 0, i = 0, end = 0, r;
while (i < max_len) {
select(fd + 1, &readfds, 0, 0, 0);
if (FD_ISSET(fd, &readfds)) {
if (!i) { // read until escaped start sequence;
r = read(fd, &byte, 1);
if (r <= 0) continue;
if (esc == 4) {
if (byte == 0x01) {
buf[esc + start++] = byte;
if (start == 4) {
i = esc + start;
esc = 0;
start = 0;
}
}
else {
// no start sequence
esc = 0;
}
}
else {
if (byte == 0x1b) {
buf[esc++] = byte;
}
else {
// no escape sequence
esc = 0;
}
}
}
else { // read the message
r = read(fd, (void *)(&(buf[i])), 1);
if (r <= 0) continue;
if (esc == 4) {
if (end) {
end++;
if (end == 4) {
memcpy(buffer, &(buf[0]), ++i);
return i;
}
}
else {
if (buf[i] == 0x1a) {
end++;
}
else {
// dont read other escaped sequences yet
printf("error: unrecognized sequence");
esc = 0;
}
}
}
else {
if (buf[i] == 0x1b) {
esc++;
}
else {
esc = 0;
}
}
i++;
}
}
}
return -1;
}
*/
void sml_transport_listen(int fd, void (*sml_transport_receiver)(unsigned char *buffer, size_t buffer_len)) {
unsigned char buffer[MC_SML_BUFFER_LEN];
size_t bytes;