资源简介
公司要求做socat源代码二次开发的时候,花了一周时间通读代码,写上了注释,添加了-M参数用于在端口无法打开的时候超时退出(不影响其他功能),在linux操作系统上编译通过,并做了测试
代码片段和文件信息
/* source: dalan.c */
/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2 see file COPYING */
/* idea of a low level data description language. currently only a most
primitive subset exists. */
#include
#include
#include
#include “dalan.h“
/* test structure to find maximal alignment */
static struct {
char a;
long double b;
} maxalign;
/* test structure to find minimal alignment */
static struct {
char a;
char b;
} minalign;
/* test union to find kind of byte ordering */
static union {
char a[2];
short b;
} byteorder = { “01“ };
struct dalan_opts_s dalan_opts = {
sizeof(int)
sizeof(short)
sizeof(long)
sizeof(char)
sizeof(float)
sizeof(double)
} ;
/* fill the dalan_opts structure with machine dependent defaults values. */
static void _dalan_dflts(struct dalan_opts_s *dlo) {
dlo->c_int = sizeof(int);
dlo->c_short = sizeof(short);
dlo->c_long = sizeof(long);
dlo->c_char = sizeof(char);
dlo->c_float = sizeof(float);
dlo->c_double = sizeof(double);
dlo->maxalign = (char *)&maxalign.b-&maxalign.a;
dlo->minalign = &minalign.b-&minalign.a;
dlo->byteorder = (byteorder.b!=7711);
}
/* allocate a new dalan_opts structure fills it with machine dependent
defaults values and returns the pointer. */
struct dalan_opts_s *dalan_props(void) {
struct dalan_opts_s *dlo;
dlo = malloc(sizeof(struct dalan_opts_s));
if (dlo == NULL) {
return NULL;
}
_dalan_dflts(dlo);
return dlo;
}
void dalan_init(void) {
_dalan_dflts(&dalan_opts);
}
/* read data description from line write result to data; do not write
so much data that *p exceeds n !
p must be initialized to 0.
return 0 on success
-1 if the data was cut due to n limit
1 if a syntax error occurred
*p is a global data counter; especially it must be used when calculating
alignment. On successful return from the function *p must be actual!
*/
int dalan(const char *line char *data size_t *p size_t n) {
int align mask i x;
size_t p1 = *p;
char c;
/*fputs(line stderr); fputc(‘\n‘ stderr);*/
while (c = *line++) {
switch (c) {
case ‘ ‘:
case ‘\t‘:
case ‘\r‘:
case ‘\n‘:
break;
case ‘‘:
align = 2;
while (*line == ‘‘) {
align <<= 1;
++line;
}
mask = align - 1; /* create the bitmask */
i = (align - (p1 & mask)) & mask;
while (i && p1 if (i) { *p = p1; return -1; }
break;
case ‘;‘:
align = dalan_opts.c_int;
mask = align - 1;
i = (align - (p1 & mask)) & mask;
while (i && p1 if (i) { *p = p1; return -1; }
break;
case ‘“‘:
while (1) {
switch (c = *line++) {
case ‘\0‘: fputs(“unterminated string\n“ stderr);
return 1;
case ‘“‘:
break;
case ‘\\‘:
if (!(c = *line++)) {
fputs(“continuation line not implemented\n“ stderr);
return 1;
}
s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-09-02 09:29 socat\
文件 3064 2014-08-30 04:45 socat\xiowrite.o
文件 35096 2014-09-02 01:38 socat\xio-socket.o
文件 16384 2014-08-22 05:40 socat\.socat.c.swp
文件 746 2014-08-22 05:40 socat\BUGREPORTS
文件 38153 2014-08-22 05:40 socat\CHANGES
文件 18092 2014-08-22 05:40 socat\COPYING
文件 6279 2014-08-22 05:40 socat\COPYING.OpenSSL
文件 7011 2014-08-22 05:40 socat\DEVELOPMENT
文件 16861 2014-08-22 05:40 socat\EXAMPLES
文件 3919 2014-08-22 05:40 socat\FAQ
文件 2763 2014-08-22 05:40 socat\FILES
文件 6525 2014-08-22 05:43 socat\Makefile
文件 6488 2014-08-22 05:40 socat\Makefile.in
文件 3095 2014-08-22 05:40 socat\PORTING
文件 11535 2014-08-22 05:40 socat\README
文件 2655 2014-08-22 05:40 socat\README.FIPS
文件 1849 2014-08-22 05:40 socat\SECURITY
文件 12 2014-08-22 05:40 socat\VERSION
文件 16430 2014-08-22 05:40 socat\compat.h
文件 14879 2014-08-22 05:40 socat\config.h
文件 13679 2014-08-22 05:40 socat\config.h.in
文件 850426 2014-08-22 05:43 socat\config.log
文件 32516 2014-08-22 05:43 socat\config.status
文件 344843 2014-08-22 05:40 socat\configure
文件 53122 2014-08-22 05:40 socat\configure.in
文件 872 2014-08-22 05:40 socat\daemon.sh
文件 5164 2014-08-22 05:40 socat\dalan.c
文件 949 2014-08-22 05:40 socat\dalan.h
文件 4436 2014-08-30 04:45 socat\dalan.o
文件 8208 2014-08-22 05:40 socat\error.c
............此处省略230个文件信息
- 上一篇:Parsing Techniques
- 下一篇:wpa_supplicant
相关资源
- qt项目扫雷游戏(有注释)
- uvm_users_guide_1.1(学习uvm必备,可添加
- 词法分析程序可记录行号、识别注释
- facenet-master_韦访注释
- 墨水屏 stm32f103 库 修改版带注释
- 最短路径-Dijkstra-欧洲旅行(详细分析
- 2013年蓝桥杯第四届-模拟灌溉系统=程
- KCF/DCF英文论文原文,带注释哟
- ghostdoc自动生成注释最新版支持vs201
- FPGA verilog例程+详细的注释
- Allegro 16.6基础教程(无水印,可添加
- PRML的大牛解读注释版,提供更清晰的
- 基于STM32ZET6正点原子战舰板的IIC接口
- 对摄像头采集到的图像进行缩放、切
- halcon自带样例,大部分语句含中文注
- 利用Opencv3.2中的DPM模块,实现DPM算法
-
spring-fr
amework-5.0.2.RELEASE-中文注释版 - 达内云笔记项目完整代码+注释
- 基于QT的简单TCP编程程序,实现连接和
- 串口调试助手+源代码+ 注释+2个word文
- 时间触发嵌入式系统设计模式---文档
- 手写数字识别MNIST数据集及卷积神经网
- pdf-reference1.7阅读注释版+pdf-reference1
- PinyinIME(关键代码写了注释).zip
-
xm
l存储系统,源码,详细注释 - linux2.6.1内核源码注释
- 浅墨的opencv学习代码,有注释,前十
- AutoUpgrader2009修改板-带源码注释(自动
- PCIe DMA部分文件及重要模块代码不是工
- 《深入浅出统计学》高清中文版、无
评论
共有 条评论