(b76ad15ed0da636161de0243c547ee1e6fc95681)
#include "ruby/ruby.h"
#include "date_tmx.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
Go to the source code of this file.
|  | 
| #define | range(low,  item,  hi)   (item) | 
|  | 
| #define | add(x,  y)   (rb_funcall((x), '+', 1, (y))) | 
|  | 
| #define | sub(x,  y)   (rb_funcall((x), '-', 1, (y))) | 
|  | 
| #define | mul(x,  y)   (rb_funcall((x), '*', 1, (y))) | 
|  | 
| #define | quo(x,  y)   (rb_funcall((x), rb_intern("quo"), 1, (y))) | 
|  | 
| #define | div(x,  y)   (rb_funcall((x), rb_intern("div"), 1, (y))) | 
|  | 
| #define | mod(x,  y)   (rb_funcall((x), '%', 1, (y))) | 
|  | 
| #define | BIT_OF(n)   (1U<<(n)) | 
|  | 
| #define | FLAG_FOUND() | 
|  | 
| #define | NEEDS(n)   do if (s >= endp || (n) >= endp - s - 1) goto err; while (0) | 
|  | 
| #define | FILL_PADDING(i) | 
|  | 
| #define | FMT(def_pad,  def_prec,  fmt,  val) | 
|  | 
| #define | STRFTIME(fmt) | 
|  | 
| #define | FMTV(def_pad,  def_prec,  fmt,  val) | 
|  | 
◆ add
◆ BIT_OF
      
        
          | #define BIT_OF | ( |  | n | ) | (1U<<(n)) | 
      
 
 
◆ div
◆ FILL_PADDING
      
        
          | #define FILL_PADDING | ( |  | i | ) |  | 
      
 
Value:            do {                                                \
                NEEDS(precision);                                       \
                memset(
s, padding ? padding : 
' ', precision - (i));    \
                s += precision - (i);                                   \
            }                                                           \
            else {                                                      \
                NEEDS(i);                                               \
            }                                                           \
        } while (0);
 
 
◆ FLAG_FOUND
Value:            do {                                                \
                goto unknown;                                           \
        } while (0)
 
 
◆ FMT
      
        
          | #define FMT | ( |  | def_pad, | 
        
          |  |  |  | def_prec, | 
        
          |  |  |  | fmt, | 
        
          |  |  |  | val | 
        
          |  | ) |  |  | 
      
 
Value:        do {                                                            \
            int l;                                                      \
            if (precision <= 0) precision = (def_prec);                 \
                         ((padding == '0' || (!padding && (def_pad) == '0')) ? \
                          "%0*"fmt : "%*"fmt),                          \
                         precision, (val));                             \
        } while (0)
 
 
◆ FMTV
      
        
          | #define FMTV | ( |  | def_pad, | 
        
          |  |  |  | def_prec, | 
        
          |  |  |  | fmt, | 
        
          |  |  |  | val | 
        
          |  | ) |  |  | 
      
 
Value:        do {                                                            \
            VALUE tmp = (val);                                          \
                FMT((def_pad), (def_prec), 
"l"fmt, 
FIX2LONG(tmp));      \
            }                                                           \
            else {                                                      \
                VALUE args[2], result;                                  \
                size_t l;                                               \
                if (precision <= 0) precision = (def_prec);             \
                args[1] = (val);                                        \
                if (padding == '0' || (!padding && (def_pad) == '0'))   \
 
                else                                                    \
                if ((
size_t)(endp - 
s) <= l)                            \
 
            }                                                           \
        } while (0)
 
 
◆ mod
◆ mul
◆ NEEDS
      
        
          | #define NEEDS | ( |  | n | ) | do if (s >= endp || (n) >= endp - s - 1) goto err; while (0) | 
      
 
 
◆ quo
◆ range
      
        
          | #define range | ( |  | low, | 
        
          |  |  |  | item, | 
        
          |  |  |  | hi | 
        
          |  | ) |  | (item) | 
      
 
 
◆ STRFTIME
Value:        do {                                                            \
            i = date_strftime_with_tmx(
s, endp - 
s, (fmt), 
tmx);        \
            if (!i) return 0;                                           \
                if (start + maxsize < 
s + precision) {                  \
                    errno = ERANGE;                                     \
                    return 0;                                           \
                }                                                       \
                memmove(
s + precision - i, 
s, i);                       \
                memset(
s, padding ? padding : 
' ', precision - i);      \
                s += precision;                                         \
            }                                                           \
        } while (0)
 
 
◆ sub
◆ date_strftime()
      
        
          | size_t date_strftime | ( | char * | s, | 
        
          |  |  | size_t | maxsize, | 
        
          |  |  | const char * | format, | 
        
          |  |  | const struct tmx * | tmx | 
        
          |  | ) |  |  |