Ruby 1.9.2p136(2010-12-25revision30365)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

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 && !block_p) \
            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.

Referenced by pack_unpack().

#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)

Referenced by pack_pack().

#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 | ( | s | ,
|  | 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 b64_table, 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]`

Definition at line 387 of file pack.c.

References BIGENDIAN_P, buf, DOUBLE_CONVWITH, ENC_CODERANGE_7BIT, encodes(), ENCODING_CODERANGE_SET, errno, FLOAT_CONVWITH, HTOND, HTONF, HTOVD, HTOVF, ISALPHA, ISDIGIT, ISSPACE, le, len, MAX_INTEGER_PACK_SIZE, NATINT_LEN, NEXTFROM, NIL_P, NUM2INT, NUM2LONG(), OBJ_INFECT, qpencode(), RARRAY_LEN, RARRAY_PTR, rb_ary_new(), rb_ary_push(), rb_big_divmod(), rb_big_pack(), rb_bug(), rb_eArgError, rb_enc_set_index(), rb_eRangeError, rb_eRuntimeError, rb_obj_as_string(), rb_obj_taint(), rb_raise(), rb_str_associate(), rb_str_buf_cat(), rb_str_buf_new(), rb_str_new(), rb_str_set_len, rb_to_float(), rb_to_int(), rb_uint2big(), rb_usascii_encindex(), rb_utf8_encindex(), rb_uv_to_utf8(), RFLOAT_VALUE, RSTRING_LEN, RSTRING_PTR, SIGNED_VALUE, strchr(), StringValue, StringValuePtr, STRTOUL, swap16, swap32, T_BIGNUM, THISFROM, TYPE, and type.

Referenced by Init_pack().

static VALUE pack_unpack | ( | VALUE | str,
|  | VALUE | fmt
| ) |  | `[static]`

Definition at line 1300 of file pack.c.

References BIGENDIAN_P, buf, DBL2NUM, DOUBLE_CONVWITH, ENC_CODERANGE_7BIT, ENCODING_CODERANGE_SET, errno, FLOAT_CONVWITH, hex2num(), infected_str_new(), INT2FIX, INT2NUM(), ISDIGIT, ISSPACE, len, MAX_INTEGER_PACK_SIZE, NATINT_LEN, NTOHD, NTOHF, PACK_ITEM_ADJUST, PACK_LENGTH_ADJUST_SIZE, Qnil, QUAD_SIZE, RARRAY_LEN, RARRAY_PTR, rb_ary_new(), rb_big_mul(), rb_big_plus(), rb_big_unpack(), rb_block_given_p(), rb_bug(), rb_eArgError, rb_eRangeError, rb_raise(), rb_str_associate(), rb_str_associated(), rb_str_new(), rb_str_set_len, rb_tainted_str_new(), rb_uint2big(), rb_usascii_encindex(), RSTRING_LEN, RSTRING_PTR, strchr(), StringValue, STRTOUL, swap16, swap32, T_STRING, TYPE, type, UINT2NUM(), ULONG2NUM(), UNPACK_PUSH, utf8_to_uv(), VTOHD, and VTOHF.

Referenced by Init_pack().

static void qpencode | ( | VALUE | str,
|  | VALUE | from,
|  | long | len
| ) |  | `[static]`

Definition at line 1111 of file pack.c.

References EOF, 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.

Referenced by encodes().

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.