资源简介
公司要求做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
相关资源
- proteus_24C08—有注释(proteus里面使用的
- vc编写中国象棋详细源码注释并附有视
- 西门子smart200 485通讯有注释.smart
- Face Alignment by Explicit Shape Regression-注释
- VS2010、VS2012、VS2013代码自动注释插件
- SAML协议交互,实现工程Demo有注释
- VC++ RS232 RS485串口通信源代码_
- 爬取豆瓣电影TOP250程序,包含非常详
- 物业费管理系统源码超详细注释附文
- libSVM的代码详细解析,注释非常详细
- spring源码 附带中文翻译
- ssm开发购物商城web项目代码+详细注释
- linux2.6.11.12内核源码注释
- VisualStudio 2008-2017系统注释中文包,解
- 全国大学生电子设计竞赛_板球控制系
- WOA源码+注释+微修改版本+源论文
- 车牌识别系统原创+详细注释版+少函数
- 24位高精度ad cs5532 程序代码 stm32 已调
- 6968389Linux内核剖析(书籍注释代码)
- 蓝桥杯嵌入式五届到八届完成全部源
- pxcook前端注释工具
- Marlin代码详细注释
- 双目视觉libviso2注释及代码解析,超详
- BPlus B+树 代码与注释
- muduo源码注释非常详细
- 勘智K210 20种物体识别工程添加图像处
- CCS6.0 注释汉字字体太小的解决方法,
- SURF源码(opencv中文注释).rar
- 摄像头Camera图像测试项目及简介——
- 数学建模资源合集论文+源码+注释
评论
共有 条评论