linux/arch/um/drivers/slip_common.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <string.h>
   3#include "slip_common.h"
   4#include <net_user.h>
   5
   6int slip_proto_read(int fd, void *buf, int len, struct slip_proto *slip)
   7{
   8        int i, n, size, start;
   9
  10        if(slip->more > 0){
  11                i = 0;
  12                while(i < slip->more){
  13                        size = slip_unesc(slip->ibuf[i++], slip->ibuf,
  14                                          &slip->pos, &slip->esc);
  15                        if(size){
  16                                memcpy(buf, slip->ibuf, size);
  17                                memmove(slip->ibuf, &slip->ibuf[i],
  18                                        slip->more - i);
  19                                slip->more = slip->more - i;
  20                                return size;
  21                        }
  22                }
  23                slip->more = 0;
  24        }
  25
  26        n = net_read(fd, &slip->ibuf[slip->pos],
  27                     sizeof(slip->ibuf) - slip->pos);
  28        if(n <= 0)
  29                return n;
  30
  31        start = slip->pos;
  32        for(i = 0; i < n; i++){
  33                size = slip_unesc(slip->ibuf[start + i], slip->ibuf,&slip->pos,
  34                                  &slip->esc);
  35                if(size){
  36                        memcpy(buf, slip->ibuf, size);
  37                        memmove(slip->ibuf, &slip->ibuf[start+i+1],
  38                                n - (i + 1));
  39                        slip->more = n - (i + 1);
  40                        return size;
  41                }
  42        }
  43        return 0;
  44}
  45
  46int slip_proto_write(int fd, void *buf, int len, struct slip_proto *slip)
  47{
  48        int actual, n;
  49
  50        actual = slip_esc(buf, slip->obuf, len);
  51        n = net_write(fd, slip->obuf, actual);
  52        if(n < 0)
  53                return n;
  54        else return len;
  55}
  56