资源简介

公司要求做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个文件信息

评论

共有 条评论