root/arch/um/drivers/slip_common.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. slip_proto_read
  2. slip_proto_write

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <string.h>
   3 #include "slip_common.h"
   4 #include <net_user.h>
   5 
   6 int 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 
  46 int 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 }

/* [<][>][^][v][top][bottom][index][help] */