Logo Search packages:      
Sourcecode: linux version File versions  Download package

slip_common.c

#include <string.h>
#include "slip_common.h"
#include "net_user.h"

int slip_proto_read(int fd, void *buf, int len, struct slip_proto *slip)
{
      int i, n, size, start;

      if(slip->more > 0){
            i = 0;
            while(i < slip->more){
                  size = slip_unesc(slip->ibuf[i++], slip->ibuf,
                                &slip->pos, &slip->esc);
                  if(size){
                        memcpy(buf, slip->ibuf, size);
                        memmove(slip->ibuf, &slip->ibuf[i],
                              slip->more - i);
                        slip->more = slip->more - i;
                        return size;
                  }
            }
            slip->more = 0;
      }

      n = net_read(fd, &slip->ibuf[slip->pos],
                 sizeof(slip->ibuf) - slip->pos);
      if(n <= 0)
            return n;

      start = slip->pos;
      for(i = 0; i < n; i++){
            size = slip_unesc(slip->ibuf[start + i], slip->ibuf,&slip->pos,
                          &slip->esc);
            if(size){
                  memcpy(buf, slip->ibuf, size);
                  memmove(slip->ibuf, &slip->ibuf[start+i+1],
                        n - (i + 1));
                  slip->more = n - (i + 1);
                  return size;
            }
      }
      return 0;
}

int slip_proto_write(int fd, void *buf, int len, struct slip_proto *slip)
{
      int actual, n;

      actual = slip_esc(buf, slip->obuf, len);
      n = net_write(fd, slip->obuf, actual);
      if(n < 0)
            return n;
      else return len;
}

Generated by  Doxygen 1.6.0   Back to index