summaryrefslogtreecommitdiff
path: root/src/lib/evil/evil_langinfo.c
blob: 5e0a3444049beb8015f5a3a54316d6f0d146d656 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif /* HAVE_CONFIG_H */

#include <stdlib.h>
#include <string.h>

#include "evil_private.h"


static char *
replace(char *prev, char *value)
{
   if (!value)
     return prev;

   if (prev)
     free (prev);
   return strdup (value);
}

char *
nl_langinfo(nl_item index)
{
   static char *result = NULL;
   static char *nothing = "";

   switch (index)
     {
      case CODESET:
        {
           char *p;
           result = replace(result, setlocale(LC_CTYPE, NULL));
           if (!(p = strrchr(result, '.')))
             return nothing;

           if ((++p - result) > 2)
             strcpy(result, "cp");
           else
             *result = '\0';
           strcat(result, p);

           return result;
        }
      case RADIXCHAR:
        {
           return localeconv()->decimal_point;
        }
      case D_T_FMT:
        {
           return "%a %d %b %Y %T %Z";
        }
      case D_FMT:
        {
           return "%m/%d/%Y";
        }
      case T_FMT:
        {
           return "%T";
        }
      case T_FMT_AMPM:
        {
           return "%r";
        }
      default:
        {
           return "%a %d %b %Y %T %Z";
        }
     }

   return nothing;
}