Jeff King a5481a6c94 convert "enum date_mode" into a struct
In preparation for adding date modes that may carry extra
information beyond the mode itself, this patch converts the
date_mode enum into a struct.

Most of the conversion is fairly straightforward; we pass
the struct as a pointer and dereference the type field where
necessary. Locations that declare a date_mode can use a "{}"
constructor.  However, the tricky case is where we use the
enum labels as constants, like:

  show_date(t, tz, DATE_NORMAL);

Ideally we could say:

  show_date(t, tz, &{ DATE_NORMAL });

but of course C does not allow that. Likewise, we cannot
cast the constant to a struct, because we need to pass an
actual address. Our options are basically:

  1. Manually add a "struct date_mode d = { DATE_NORMAL }"
     definition to each caller, and pass "&d". This makes
     the callers uglier, because they sometimes do not even
     have their own scope (e.g., they are inside a switch
     statement).

  2. Provide a pre-made global "date_normal" struct that can
     be passed by address. We'd also need "date_rfc2822",
     "date_iso8601", and so forth. But at least the ugliness
     is defined in one place.

  3. Provide a wrapper that generates the correct struct on
     the fly. The big downside is that we end up pointing to
     a single global, which makes our wrapper non-reentrant.
     But show_date is already not reentrant, so it does not
     matter.

This patch implements 3, along with a minor macro to keep
the size of the callers sane.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-29 11:39:07 -07:00
..
2015-06-25 10:47:46 -07:00
2014-07-16 11:10:11 -07:00
2015-06-29 11:39:07 -07:00
2015-06-05 12:17:37 -07:00
2015-06-01 12:45:15 -07:00
2015-06-11 09:29:52 -07:00
2015-01-14 09:32:04 -08:00
2015-05-11 14:39:28 -07:00
2015-06-24 12:21:48 -07:00
2015-05-11 14:23:39 -07:00
2015-05-11 14:23:59 -07:00
2015-03-20 13:11:53 -07:00
2015-06-29 11:39:07 -07:00
2015-06-05 12:17:36 -07:00
2015-01-14 09:32:04 -08:00
2015-01-14 09:32:04 -08:00
2015-05-11 14:23:39 -07:00
2015-05-11 14:23:39 -07:00
2015-01-14 09:32:04 -08:00
2015-01-14 09:32:04 -08:00