Defines | Functions

strftime.c File Reference

#include "ruby/ruby.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>
Include dependency graph for strftime.c:

Go to the source code of this file.

Defines

#define SYSV_EXT   1
#define SUNOS_EXT   1
#define POSIX2_DATE   1
#define VMS_EXT   1
#define MAILHEADER_EXT   1
#define ISO_DATE_EXT   1
#define POSIX_SEMANTICS   1
#define adddecl(stuff)   stuff
#define const
#define range(low, item, hi)   max(low, min(item, hi))
#define DLL_IMPORT
#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 + (n) >= endp - 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 ()
 adddecl (static int iso8601wknum();)
static int max (int a, int b)
static size_t rb_strftime_with_timespec (char *s, size_t maxsize, const char *format, const struct vtm *vtm, VALUE timev, struct timespec *ts, int gmt)
size_t rb_strftime (char *s, size_t maxsize, const char *format, const struct vtm *vtm, VALUE timev, int gmt)
size_t rb_strftime_timespec (char *s, size_t maxsize, const char *format, 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 (struct tm *timeptr) const
static int iso8601wknum_v (const struct vtm *vtm)
static int weeknumber (struct tm *timeptr, int firstweekday) const
static int weeknumber_v (const struct vtm *vtm, int firstweekday)

Define Documentation

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

Definition at line 183 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define adddecl (   stuff  )     stuff

Definition at line 96 of file strftime.c.

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

Definition at line 104 of file strftime.c.

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

Referenced by adddecl().

#define FILL_PADDING (   i  ) 
Value:
do { \
        if (!(flags & BIT_OF(LEFT)) && precision > i) { \
                NEEDS(precision); \
                memset(s, padding ? padding : ' ', precision - i); \
                s += precision - i; \
        } \
        else { \
                NEEDS(i); \
        } \
} while (0);

Referenced by rb_strftime_with_timespec().

#define FLAG_FOUND (  ) 
Value:
do { \
                        if (precision > 0 || flags & (BIT_OF(LOCALE_E)|BIT_OF(LOCALE_O))) \
                                goto unknown; \
                } while (0)

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)

Referenced by rb_strftime_with_timespec().

#define FMTV (   def_pad,
  def_prec,
  fmt,
  val 
)
Value:
do { \
                        VALUE tmp = (val); \
                        if (FIXNUM_P(tmp)) { \
                                FMT((def_pad), (def_prec), "l"fmt, FIX2LONG(tmp)); \
                        } \
                        else { \
                                VALUE args[2], result; \
                                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)

Referenced by rb_strftime_with_timespec().

#define ISO_DATE_EXT   1

Definition at line 75 of file strftime.c.

#define MAILHEADER_EXT   1

Definition at line 74 of file strftime.c.

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

Definition at line 185 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define NEEDS (   n  )     do if (s + (n) >= endp - 1) goto err; while (0)
#define POSIX2_DATE   1

Definition at line 72 of file strftime.c.

#define POSIX_SEMANTICS   1

Definition at line 77 of file strftime.c.

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

Definition at line 186 of file strftime.c.

Referenced by rb_strftime_with_timespec().

#define range (   low,
  item,
  hi 
)    max(low, min(item, hi))
#define STRFTIME (   fmt  ) 
Value:
do { \
                        i = rb_strftime_with_timespec(s, endp - s, fmt, vtm, timev, ts, gmt); \
                        if (!i) return 0; \
                        if (precision > i) {\
                                memmove(s + precision - i, s, i);\
                                memset(s, padding ? padding : ' ', precision - i); \
                                s += precision; \
                        }\
                        else s += i; \
                } while (0)

Referenced by rb_strftime_with_timespec().

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

Definition at line 184 of file strftime.c.

Referenced by rb_str_substr(), and rb_strftime_with_timespec().

#define SUNOS_EXT   1

Definition at line 71 of file strftime.c.

#define SYSV_EXT   1

Definition at line 70 of file strftime.c.

#define VMS_EXT   1

Definition at line 73 of file strftime.c.


Function Documentation

adddecl ( static int iso8601wknum();   ) 

Definition at line 106 of file strftime.c.

References DLL_IMPORT.

static int isleap ( long  year  )  [static]

Definition at line 908 of file strftime.c.

Referenced by iso8601wknum().

static int iso8601wknum ( struct tm *  timeptr  )  const [static]

Definition at line 949 of file strftime.c.

References isleap(), and weeknumber().

Referenced by iso8601wknum_v().

static int iso8601wknum_v ( const struct vtm vtm  )  [static]

Definition at line 1061 of file strftime.c.

References iso8601wknum(), and vtm2tm_noyear().

Referenced by rb_strftime_with_timespec().

static int max ( int  a,
int  b 
) [inline, static]

Definition at line 169 of file strftime.c.

Referenced by optimize_node_left(), random_rand(), and tr_trans().

size_t rb_strftime ( char *  s,
size_t  maxsize,
const char *  format,
const struct vtm vtm,
VALUE  timev,
int  gmt 
)

Definition at line 893 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,
const struct vtm vtm,
struct timespec ts,
int  gmt 
)

Definition at line 899 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,
const struct vtm vtm,
VALUE  timev,
struct timespec ts,
int  gmt 
) [static]
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 ( struct tm *  timeptr,
int  firstweekday 
) const [static]

Definition at line 1076 of file strftime.c.

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

Definition at line 1100 of file strftime.c.

References vtm2tm_noyear(), and weeknumber().

Referenced by rb_strftime_with_timespec().