遇见YY

导航

 
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>#define MIN(a, b)               ((a) < (b) ? (a) : (b))
#define MAX(a, b)               ((a) > (b) ? (a) : (b))

uint32_t RingBuf_Write(uint8_t *rbuf, uint32_t maxsize, uint32_t tail, uint8_t *src, uint32_t len)
{
    uint8_t *buf1 = rbuf + tail;
    int      len1 = MIN(maxsize-tail, len);
    uint8_t *buf2 = rbuf;
    int      len2 = len  - len1;
    memcpy(buf1, src + 0   , len1);
    memcpy(buf2, src + len1, len2);
    return len2 ? len2 : tail + len1;
}

uint32_t RingBuf_Read(uint8_t *rbuf, uint32_t maxsize, uint32_t head, uint8_t *dst, uint32_t len)
{
    uint8_t *buf1 = rbuf + head;
    int      len1 = MIN(maxsize-head, len);
    uint8_t *buf2 = rbuf;
    int      len2 = len  - len1;
    if (dst) memcpy(dst + 0   , buf1, len1);
    if (dst) memcpy(dst + len1, buf2, len2);
    return len2 ? len2 : head + len1;
}
int main(int argc, char *argv[]){
    int maxsize = 4;
    uint8_t  * rbuf = malloc(maxsize);
    int tail = 0;
    uint8_t * src = "hello";
    uint32_t  len = strlen(src);
    uint32_t  out = RingBuf_Write(rbuf,maxsize,tail,src,len);
    printf("out:%d\n",out);
    printf("rbuf:%s\n",rbuf);

    printf("---------\n");

    int head = 0;
    uint8_t *dst = malloc(8);
    uint32_t ret = RingBuf_Read(rbuf,maxsize,head,dst,2);

    printf("ret:%d\n",ret);
    printf("dst:%s\n",dst);


    return 0;
}

摘录自:https://github.com/rockcarry/ffrdp

posted on 2020-10-07 10:48  一骑红尘妃子笑!  阅读(318)  评论(0编辑  收藏  举报