Ruby  2.0.0p247(2013-06-27revision41674)
Macros | Functions
strftime.c File Reference
#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include "timev.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <errno.h>
#include <math.h>

Go to the source code of this file.

Macros

#define SYSV_EXT   1 /* stuff in System V ascftime routine */
 
#define SUNOS_EXT   1 /* stuff in SunOS strftime routine */
 
#define POSIX2_DATE   1 /* stuff in Posix 1003.2 date command */
 
#define VMS_EXT   1 /* include %v for VMS date format */
 
#define MAILHEADER_EXT   1 /* add %z for HHMM format */
 
#define ISO_DATE_EXT   1 /* %G and %g for year of ISO week */
 
#define adddecl(stuff)   stuff
 
#define const
 
#define range(low, item, hi)   max((low), min((item), (hi)))
 
#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 TBUFSIZE   100
 
#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)
 

Functions

static int weeknumber ()
 
static int weeknumber_v ()
 
voidmalloc ()
 
voidrealloc ()
 
char * getenv ()
 
char * strchr ()
 
static int min (int a, int b)
 
static int max (int a, int b)
 
static size_t rb_strftime_with_timespec (char *s, size_t maxsize, const char *format, rb_encoding *enc, const struct vtm *vtm, VALUE timev, struct timespec *ts, int gmt)
 
size_t rb_strftime (char *s, size_t maxsize, const char *format, rb_encoding *enc, const struct vtm *vtm, VALUE timev, int gmt)
 
size_t rb_strftime_timespec (char *s, size_t maxsize, const char *format, rb_encoding *enc, const struct vtm *vtm, struct timespec *ts, int gmt)
 
static int isleap (long year)
 
static void vtm2tm_noyear (const struct vtm *vtm, struct tm *result)
 
static int iso8601wknum (const struct tm *timeptr)
 
static int iso8601wknum_v (const struct vtm *vtm)
 
static int weeknumber (const struct tm *timeptr, int firstweekday)
 
static int weeknumber_v (const struct vtm *vtm, int firstweekday)
 

Macro Definition Documentation

#define add (   x,
 
)    (rb_funcall((x), '+', 1, (y)))

Definition at line 150 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define adddecl (   stuff)    stuff

Definition at line 94 of file strftime.c.

#define BIT_OF (   n)    (1U<<(n))
#define const

Definition at line 102 of file strftime.c.

#define div (   x,
 
)    (rb_funcall((x), rb_intern("div"), 1, (y)))

Definition at line 154 of file strftime.c.

#define FILL_PADDING (   i)
Value:
do { \
if (!(flags & BIT_OF(LEFT)) && precision > (i)) { \
NEEDS(precision); \
memset(s, padding ? padding : ' ', precision - (i)); \
s += precision - (i); \
} \
NEEDS(i); \
} \
} while (0);
#define NEEDS(n)
ssize_t i
Definition: bigdecimal.c:5655
memset(y->frac+ix+1, 0,(y->Prec-(ix+1))*sizeof(BDIGIT))
int flags
Definition: tcltklib.c:3023
register char * s
Definition: os2.c:56
else
Definition: bigdecimal.c:1192
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1186
#define BIT_OF(n)

Referenced by rb_strftime_with_timespec().

#define FLAG_FOUND ( )
Value:
do { \
if (precision > 0) \
goto unknown; \
} while (0)
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1186

Referenced by rb_strftime_with_timespec().

#define FMT (   def_pad,
  def_prec,
  fmt,
  val 
)
Value:
do { \
int l; \
if (precision <= 0) precision = (def_prec); \
if (flags & BIT_OF(LEFT)) precision = 1; \
l = snprintf(s, endp - s, \
((padding == '0' || (!padding && (def_pad) == '0')) ? "%0*"fmt : "%*"fmt), \
precision, (val)); \
if (l < 0) goto err; \
s += l; \
} while (0)
VP_EXPORT int
Definition: bigdecimal.c:5050
const char * fmt
Definition: tcltklib.c:841
while(a->frac[0]/shift==0)
Definition: bigdecimal.c:5117
#define val
Definition: tcltklib.c:1949
int flags
Definition: tcltklib.c:3023
int err
Definition: win32.c:87
register char * s
Definition: os2.c:56
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1186
#define BIT_OF(n)
#define snprintf

Referenced by rb_strftime_with_timespec().

#define FMTV (   def_pad,
  def_prec,
  fmt,
  val 
)
Value:
do { \
if (FIXNUM_P(tmp)) { \
FMT((def_pad), (def_prec), "l"fmt, FIX2LONG(tmp)); \
} \
size_t l; \
if (precision <= 0) precision = (def_prec); \
if (flags & BIT_OF(LEFT)) precision = 1; \
args[0] = INT2FIX(precision); \
args[1] = (val); \
if (padding == '0' || (!padding && (def_pad) == '0')) \
result = rb_str_format(2, args, rb_str_new2("%0*"fmt)); \
else \
result = rb_str_format(2, args, rb_str_new2("%*"fmt)); \
l = strlcpy(s, StringValueCStr(result), endp-s); \
if ((size_t)(endp-s) <= l) \
goto err; \
s += l; \
} \
} while (0)
volatile VALUE tmp
Definition: tcltklib.c:10209
#define rb_str_new2
VALUE VALUE args
Definition: tcltklib.c:2561
const char * fmt
Definition: tcltklib.c:841
RUBY_EXTERN size_t strlcpy(char *, const char *, size_t)
while(a->frac[0]/shift==0)
Definition: bigdecimal.c:5117
#define FIXNUM_P(f)
#define val
Definition: tcltklib.c:1949
#define StringValueCStr(v)
int flags
Definition: tcltklib.c:3023
#define INT2FIX(i)
#define FIX2LONG(x)
int err
Definition: win32.c:87
VALUE rb_str_format(int, const VALUE *, VALUE)
Definition: sprintf.c:439
q result
Definition: tcltklib.c:7070
register char * s
Definition: os2.c:56
else
Definition: bigdecimal.c:1192
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1186
#define FMT(def_pad, def_prec, fmt, val)
unsigned long VALUE
Definition: ripper.y:104
#define BIT_OF(n)

Referenced by rb_strftime_with_timespec().

#define ISO_DATE_EXT   1 /* %G and %g for year of ISO week */

Definition at line 76 of file strftime.c.

#define MAILHEADER_EXT   1 /* add %z for HHMM format */

Definition at line 75 of file strftime.c.

#define mod (   x,
 
)    (rb_funcall((x), '%', 1, (y)))

Definition at line 155 of file strftime.c.

Referenced by rb_strftime_with_timespec(), and vtm2tm_noyear().

#define mul (   x,
 
)    (rb_funcall((x), '*', 1, (y)))

Definition at line 152 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define NEEDS (   n)    do if (s >= endp || (n) >= endp - s - 1) goto err; while (0)
#define POSIX2_DATE   1 /* stuff in Posix 1003.2 date command */

Definition at line 73 of file strftime.c.

#define quo (   x,
 
)    (rb_funcall((x), rb_intern("quo"), 1, (y)))

Definition at line 153 of file strftime.c.

#define range (   low,
  item,
  hi 
)    max((low), min((item), (hi)))

Definition at line 124 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define STRFTIME (   fmt)
Value:
do { \
i = rb_strftime_with_timespec(s, endp - s, (fmt), enc, vtm, timev, ts, gmt); \
if (!i) return 0; \
if (precision > i) {\
NEEDS(precision); \
memmove(s + precision - i, s, i);\
memset(s, padding ? padding : ' ', precision - i); \
s += precision; \
}\
else s += i; \
} while (0)
#define NEEDS(n)
return
Definition: bigdecimal.c:5800
ssize_t i
Definition: bigdecimal.c:5655
RUBY_EXTERN void * memmove(void *, const void *, size_t)
Definition: memmove.c:7
static size_t rb_strftime_with_timespec(char *s, size_t maxsize, const char *format, rb_encoding *enc, const struct vtm *vtm, VALUE timev, struct timespec *ts, int gmt)
Definition: strftime.c:165
VALUE enc
Definition: tcltklib.c:10311
const char * fmt
Definition: tcltklib.c:841
memset(y->frac+ix+1, 0,(y->Prec-(ix+1))*sizeof(BDIGIT))
Definition: timev.h:4
register char * s
Definition: os2.c:56
else
Definition: bigdecimal.c:1192
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1186

Referenced by rb_strftime_with_timespec().

#define sub (   x,
 
)    (rb_funcall((x), '-', 1, (y)))

Definition at line 151 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define SUNOS_EXT   1 /* stuff in SunOS strftime routine */

Definition at line 72 of file strftime.c.

#define SYSV_EXT   1 /* stuff in System V ascftime routine */

Definition at line 71 of file strftime.c.

#define TBUFSIZE   100
#define VMS_EXT   1 /* include %v for VMS date format */

Definition at line 74 of file strftime.c.

Function Documentation

char* getenv ( )
static int isleap ( long  year)
static

Definition at line 844 of file strftime.c.

Referenced by iso8601wknum().

static int iso8601wknum ( const struct tm *  timeptr)
static

Definition at line 879 of file strftime.c.

References isleap(), and weeknumber().

Referenced by iso8601wknum_v().

static int iso8601wknum_v ( const struct vtm vtm)
static

Definition at line 986 of file strftime.c.

References iso8601wknum(), and vtm2tm_noyear().

Referenced by rb_strftime_with_timespec().

void* malloc ( )
static int max ( int  a,
int  b 
)
inlinestatic
static int min ( int  a,
int  b 
)
inlinestatic
size_t rb_strftime ( char *  s,
size_t  maxsize,
const char *  format,
rb_encoding enc,
const struct vtm vtm,
VALUE  timev,
int  gmt 
)

Definition at line 830 of file strftime.c.

References NULL, and rb_strftime_with_timespec().

Referenced by rb_strftime_alloc().

size_t rb_strftime_timespec ( char *  s,
size_t  maxsize,
const char *  format,
rb_encoding enc,
const struct vtm vtm,
struct timespec ts,
int  gmt 
)

Definition at line 836 of file strftime.c.

References Qnil, and rb_strftime_with_timespec().

Referenced by rb_strftime_alloc().

static size_t rb_strftime_with_timespec ( char *  s,
size_t  maxsize,
const char *  format,
rb_encoding enc,
const struct vtm vtm,
VALUE  timev,
struct timespec ts,
int  gmt 
)
static
void* realloc ( )
char* strchr ( )
static void vtm2tm_noyear ( const struct vtm vtm,
struct tm *  result 
)
static
static int weeknumber ( )
static

Referenced by iso8601wknum(), and weeknumber_v().

static int weeknumber ( const struct tm *  timeptr,
int  firstweekday 
)
static

Definition at line 1000 of file strftime.c.

References ret.

static int weeknumber_v ( )
static
static int weeknumber_v ( const struct vtm vtm,
int  firstweekday 
)
static

Definition at line 1018 of file strftime.c.

References vtm2tm_noyear(), and weeknumber().