Defines | Functions | Variables

pack.c File Reference

#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include <sys/types.h>
#include <ctype.h>
#include <errno.h>
Include dependency graph for pack.c:

Go to the source code of this file.

Defines

#define GCC_VERSION_SINCE(major, minor, patchlevel)
#define SIZE16   2
#define SIZE32   4
#define NATINT_PACK
#define BIGENDIAN_P()   0
#define NATINT_LEN(type, len)   (natint?(int)sizeof(type):(int)(len))
#define define_swapx(x, xtype)
#define swap16(x)   ((((x)&0xFF)<<8) | (((x)>>8)&0xFF))
#define swap32(x)
#define rb_ntohf(x)   (BIGENDIAN_P()?(x):swapf(x))
#define rb_ntohd(x)   (BIGENDIAN_P()?(x):swapd(x))
#define rb_htonf(x)   (BIGENDIAN_P()?(x):swapf(x))
#define rb_htond(x)   (BIGENDIAN_P()?(x):swapd(x))
#define rb_htovf(x)   (BIGENDIAN_P()?swapf(x):(x))
#define rb_htovd(x)   (BIGENDIAN_P()?swapd(x):(x))
#define rb_vtohf(x)   (BIGENDIAN_P()?swapf(x):(x))
#define rb_vtohd(x)   (BIGENDIAN_P()?swapd(x):(x))
#define FLOAT_CONVWITH(y)
#define HTONF(x, y)   rb_htonf(x)
#define HTOVF(x, y)   rb_htovf(x)
#define NTOHF(x, y)   rb_ntohf(x)
#define VTOHF(x, y)   rb_vtohf(x)
#define DOUBLE_CONVWITH(y)
#define HTOND(x, y)   rb_htond(x)
#define HTOVD(x, y)   rb_htovd(x)
#define NTOHD(x, y)   rb_ntohd(x)
#define VTOHD(x, y)   rb_vtohd(x)
#define QUAD_SIZE   8
#define MAX_INTEGER_PACK_SIZE   8
#define TOO_FEW   (rb_raise(rb_eArgError, toofew), 0)
#define THISFROM   (items > 0 ? RARRAY_PTR(ary)[idx] : TOO_FEW)
#define NEXTFROM   (items-- > 0 ? RARRAY_PTR(ary)[idx++] : TOO_FEW)
#define PACK_LENGTH_ADJUST_SIZE(sz)
#define PACK_ITEM_ADJUST()
#define UNPACK_PUSH(item)
#define BYTEWIDTH   8

Functions

 define_swapx (s, short)
static void encodes (VALUE, const char *, long, int, int)
static void qpencode (VALUE, VALUE, long)
static unsigned long utf8_to_uv (const char *, long *)
static VALUE pack_pack (VALUE ary, VALUE fmt)
static int hex2num (char c)
static VALUE infected_str_new (const char *ptr, long len, VALUE str)
static VALUE pack_unpack (VALUE str, VALUE fmt)
int rb_uv_to_utf8 (char buf[6], unsigned long uv)
void Init_pack (void)

Variables

static const char toofew [] = "too few arguments"
static const char uu_table [] = "`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
static const char b64_table [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
static const char hex_table [] = "0123456789ABCDEF"
static const unsigned long utf8_limits []

Define Documentation

#define BIGENDIAN_P (  )     0

Definition at line 50 of file pack.c.

Referenced by pack_pack(), and pack_unpack().

#define BYTEWIDTH   8

Definition at line 2117 of file pack.c.

#define define_swapx (   x,
  xtype 
)
Value:
static xtype                            \
TOKEN_PASTE(swap,x)(xtype z)            \
{                                       \
    xtype r;                            \
    xtype *zp;                          \
    unsigned char *s, *t;               \
    int i;                              \
                                        \
    zp = xmalloc(sizeof(xtype));        \
    *zp = z;                            \
    s = (unsigned char*)zp;             \
    t = xmalloc(sizeof(xtype));         \
    for (i=0; i<sizeof(xtype); i++) {   \
        t[sizeof(xtype)-i-1] = s[i];    \
    }                                   \
    r = *(xtype *)t;                    \
    xfree(t);                           \
    xfree(zp);                          \
    return r;                           \
}

Definition at line 67 of file pack.c.

#define DOUBLE_CONVWITH (   y  ) 

Referenced by pack_pack(), and pack_unpack().

#define FLOAT_CONVWITH (   y  ) 

Referenced by pack_pack(), and pack_unpack().

#define GCC_VERSION_SINCE (   major,
  minor,
  patchlevel 
)
Value:
(defined(__GNUC__) && !defined(__INTEL_COMPILER) && \
   ((__GNUC__ > (major)) ||  \
    (__GNUC__ == (major) && __GNUC_MINOR__ > (minor)) || \
    (__GNUC__ == (major) && __GNUC_MINOR__ == (minor) && __GNUC_PATCHLEVEL__ >= (patchlevel))))

Definition at line 18 of file pack.c.

#define HTOND (   x,
  y 
)    rb_htond(x)

Referenced by pack_pack().

#define HTONF (   x,
  y 
)    rb_htonf(x)

Referenced by pack_pack().

#define HTOVD (   x,
  y 
)    rb_htovd(x)

Referenced by pack_pack().

#define HTOVF (   x,
  y 
)    rb_htovf(x)

Referenced by pack_pack().

#define MAX_INTEGER_PACK_SIZE   8

Definition at line 286 of file pack.c.

Referenced by pack_pack(), and pack_unpack().

#define NATINT_LEN (   type,
  len 
)    (natint?(int)sizeof(type):(int)(len))

Definition at line 54 of file pack.c.

Referenced by pack_pack(), and pack_unpack().

#define NATINT_PACK

Definition at line 28 of file pack.c.

#define NEXTFROM   (items-- > 0 ? RARRAY_PTR(ary)[idx++] : TOO_FEW)

Referenced by pack_pack().

#define NTOHD (   x,
  y 
)    rb_ntohd(x)

Referenced by pack_unpack().

#define NTOHF (   x,
  y 
)    rb_ntohf(x)

Referenced by pack_unpack().

#define PACK_ITEM_ADJUST (  ) 
Value:
do { \
    if (tmp_len > 0) \
        rb_ary_store(ary, RARRAY_LEN(ary)+tmp_len-1, Qnil); \
} while (0)

Definition at line 1191 of file pack.c.

Referenced by pack_unpack().

#define PACK_LENGTH_ADJUST_SIZE (   sz  ) 
Value:
do {    \
    tmp_len = 0;                                \
    if (len > (long)((send-s)/sz)) {            \
        if (!star) {                            \
            tmp_len = len-(send-s)/sz;          \
        }                                       \
        len = (send-s)/sz;                      \
    }                                           \
} while (0)

Definition at line 1181 of file pack.c.

Referenced by pack_unpack().

#define QUAD_SIZE   8

Definition at line 285 of file pack.c.

#define rb_htond (   x  )     (BIGENDIAN_P()?(x):swapd(x))
#define rb_htonf (   x  )     (BIGENDIAN_P()?(x):swapf(x))
#define rb_htovd (   x  )     (BIGENDIAN_P()?swapd(x):(x))
#define rb_htovf (   x  )     (BIGENDIAN_P()?swapf(x):(x))
#define rb_ntohd (   x  )     (BIGENDIAN_P()?(x):swapd(x))
#define rb_ntohf (   x  )     (BIGENDIAN_P()?(x):swapf(x))
#define rb_vtohd (   x  )     (BIGENDIAN_P()?swapd(x):(x))
#define rb_vtohf (   x  )     (BIGENDIAN_P()?swapf(x):(x))
#define SIZE16   2

Definition at line 24 of file pack.c.

#define SIZE32   4

Definition at line 25 of file pack.c.

#define swap16 (   x  )     ((((x)&0xFF)<<8) | (((x)>>8)&0xFF))

Definition at line 95 of file pack.c.

Referenced by pack_pack(), and pack_unpack().

#define swap32 (   x  ) 
Value:
((((x)&0xFF)<<24)       \
                        |(((x)>>24)&0xFF)       \
                        |(((x)&0x0000FF00)<<8)  \
                        |(((x)&0x00FF0000)>>8)  )

Definition at line 99 of file pack.c.

Referenced by pack_pack(), and pack_unpack().

#define THISFROM   (items > 0 ? RARRAY_PTR(ary)[idx] : TOO_FEW)
#define TOO_FEW   (rb_raise(rb_eArgError, toofew), 0)
#define UNPACK_PUSH (   item  ) 
Value:
do {\
        VALUE item_val = (item);\
        if (block_p) {\
            rb_yield(item_val);\
        }\
        else {\
            rb_ary_push(ary, item_val);\
        }\
    } while (0)

Referenced by pack_unpack().

#define VTOHD (   x,
  y 
)    rb_vtohd(x)

Referenced by pack_unpack().

#define VTOHF (   x,
  y 
)    rb_vtohf(x)

Referenced by pack_unpack().


Function Documentation

define_swapx ( ,
short   
)

Definition at line 124 of file pack.c.

static void encodes ( VALUE  str,
const char *  s,
long  len,
int  type,
int  tail_lf 
) [static]

Definition at line 1063 of file pack.c.

References rb_str_buf_cat(), and trans.

Referenced by pack_pack().

static int hex2num ( char  c  )  [inline, static]

Definition at line 1164 of file pack.c.

Referenced by pack_unpack().

static VALUE infected_str_new ( const char *  ptr,
long  len,
VALUE  str 
) [static]

Definition at line 1197 of file pack.c.

References OBJ_INFECT, and rb_str_new().

Referenced by pack_unpack().

void Init_pack ( void   ) 

Definition at line 2225 of file pack.c.

References pack_pack(), pack_unpack(), rb_cArray, rb_cString, and rb_define_method().

static VALUE pack_pack ( VALUE  ary,
VALUE  fmt 
) [static]
static VALUE pack_unpack ( VALUE  str,
VALUE  fmt 
) [static]
static void qpencode ( VALUE  str,
VALUE  from,
long  len 
) [static]

Definition at line 1111 of file pack.c.

References rb_str_buf_cat(), RSTRING_LEN, and RSTRING_PTR.

Referenced by pack_pack().

int rb_uv_to_utf8 ( char  buf[6],
unsigned long  uv 
)

Definition at line 2120 of file pack.c.

References rb_eRangeError, and rb_raise().

Referenced by append_utf8(), and pack_pack().

static unsigned long utf8_to_uv ( const char *  p,
long *  lenp 
) [static]

Definition at line 2175 of file pack.c.

References rb_eArgError, and rb_raise().

Referenced by pack_unpack().


Variable Documentation

const char b64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [static]

Definition at line 1059 of file pack.c.

const char hex_table[] = "0123456789ABCDEF" [static]

Definition at line 1108 of file pack.c.

const char toofew[] = "too few arguments" [static]

Definition at line 289 of file pack.c.

const unsigned long utf8_limits[] [static]
Initial value:
 {
    0x0,                        
    0x80,                       
    0x800,                      
    0x10000,                    
    0x200000,                   
    0x4000000,                  
    0x80000000,                 
}

Definition at line 2164 of file pack.c.

const char uu_table[] = "`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" [static]

Definition at line 1057 of file pack.c.