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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#include "win_patch.h"
#if !HAVE_STRTOL_L
long strtol_l(const char *nptr, char **endptr, int base, _locale_t locale) {
return strtol(nptr, endptr, base);
}
#endif
#if !HAVE_STRTOLL_L
long long strtoll_l(const char *nptr, char **endptr, int base, _locale_t locale) {
return strtoll(nptr, endptr, base);
}
#endif
#if !HAVE__ISBLANK_L
inline int isblank_l( int c, _locale_t _loc)
{
return ( c == ' ' || c == '\t' );
}
#endif
inline int strncasecmp_l(const char *s1, const char *s2, int len, _locale_t _loc) {
return strncasecmp(s1, s2, len);
}
inline struct tm *gmtime_r(const time_t *_time_t, struct tm *_tm) {
errno_t err = gmtime_s(_tm, _time_t);
if (err) {
return NULL;
}
return _tm;
}
inline struct tm *localtime_r(const time_t *_time_t, struct tm *_tm) {
errno_t err = localtime_s(_tm, _time_t);
if (err) {
return NULL;
}
return _tm;
}
const struct lc_time_T _C_time_locale = {
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
}, {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
}, {
"Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat"
}, {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
},
/* X_fmt */
"%H:%M:%S",
/*
* x_fmt
* Since the C language standard calls for
* "date, using locale's date format," anything goes.
* Using just numbers (as here) makes Quakers happier;
* it's also compatible with SVR4.
*/
"%m/%d/%y",
/*
* c_fmt
*/
"%a %b %e %H:%M:%S %Y",
/* am */
"AM",
/* pm */
"PM",
/* date_fmt */
"%a %b %e %H:%M:%S %Z %Y",
/* alt_month
* Standalone months forms for %OB
*/
{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
},
/* md_order
* Month / day order in dates
*/
"md",
/* ampm_fmt
* To determine 12-hour clock format time (empty, if N/A)
*/
"%I:%M:%S %p"
};
int _patch_setenv(const char *var, const char *val, int _ovr) {
if (val == NULL) {
return _patch_unsetenv(var);
}
int varlen = strlen(var);
int vallen = strlen(val);
int len = varlen + vallen + 2;
char *sname = (char *)malloc(len);
strcpy(sname, var);
sname[varlen] = '=';
strcpy(sname + varlen + 1, val);
sname[varlen + vallen + 1] = '\0';
int r = _putenv(sname);
free(sname);
return r;
}
int _patch_unsetenv(const char *name) {
int len = strlen(name) + 2;
char *sname = (char *)malloc(len);
strcpy(sname, name);
sname[len] = '=';
sname[len + 1] = '\0';
int r = _putenv(sname);
free(sname);
return r;
}
|