diff options
author | Adam Chlipala <adam@chlipala.net> | 2014-02-18 07:07:01 -0500 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2014-02-18 07:07:01 -0500 |
commit | a5299611e8a126a86a7f2121aa339d69a9fa5895 (patch) | |
tree | a7d9f1a32d92963d45c8ab93f0fec2396d973bd5 /src | |
parent | 6337358bed21a199da8663fe198457c799e11467 (diff) | |
parent | a3c561f3daaffc39245c1aabee46f8cc22f375b8 (diff) |
Merge with small clean-ups
Diffstat (limited to 'src')
-rw-r--r-- | src/c/urweb.c | 80 | ||||
-rw-r--r-- | src/settings.sml | 10 |
2 files changed, 75 insertions, 15 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c index c0c339c1..7ff8a262 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -847,7 +847,7 @@ static void adjust_input(input *x, input *old_start, input *new_start, size_t le break; default: break; - } + } } size_t uw_subinputs_max = SIZE_MAX; @@ -1863,12 +1863,12 @@ uw_unit uw_Basis_urlifyInt_w(uw_context ctx, uw_Basis_int n) { uw_unit uw_Basis_urlifyChannel_w(uw_context ctx, uw_Basis_channel chn) { if (ctx->client != NULL && chn.cli == ctx->client->id) { int len; - + uw_check(ctx, INTS_MAX + 1); sprintf(ctx->page.front, "%u%n", chn.chn, &len); ctx->page.front += len; } - + return uw_unit_v; } @@ -1929,11 +1929,11 @@ uw_unit uw_Basis_urlifyBool_w(uw_context ctx, uw_Basis_bool b) { uw_unit uw_Basis_urlifySource_w(uw_context ctx, uw_Basis_source src) { int len; - + uw_check(ctx, 2 * INTS_MAX + 2); sprintf(ctx->page.front, "%d/%llu%n", src.context, src.source, &len); ctx->page.front += len; - + return uw_unit_v; } @@ -2024,7 +2024,7 @@ static uw_Basis_string uw_unurlifyString_to(int fromClient, uw_context ctx, char uw_Basis_bool uw_Basis_unurlifyBool(uw_context ctx, char **s) { char *new_s = uw_unurlify_advance(*s); uw_Basis_bool r; - + if (*s[0] == 0 || !strcmp(*s, "0") || !strcmp(*s, "off")) r = uw_Basis_False; else @@ -2085,7 +2085,7 @@ uw_unit uw_Basis_htmlifyInt_w(uw_context ctx, uw_Basis_int n) { uw_check(ctx, INTS_MAX); sprintf(ctx->page.front, "%lld%n", n, &len); ctx->page.front += len; - + return uw_unit_v; } @@ -2149,7 +2149,7 @@ uw_unit uw_Basis_jsifyInt_w(uw_context ctx, uw_Basis_int n) { uw_check(ctx, INTS_MAX); sprintf(ctx->page.front, "%lld%n", (uw_Basis_int)n, &len); ctx->page.front += len; - + return uw_unit_v; } @@ -2253,7 +2253,7 @@ uw_unit uw_Basis_htmlifySource_w(uw_context ctx, uw_Basis_source src) { uw_check(ctx, 2 * INTS_MAX + 1); sprintf(ctx->page.front, "s%d_%llu%n", src.context, src.source, &len); ctx->page.front += len; - + return uw_unit_v; } @@ -2363,7 +2363,7 @@ uw_Basis_string uw_Basis_substring(uw_context ctx, uw_Basis_string s, uw_Basis_i r[len] = 0; return r; } - + } uw_Basis_string uw_Basis_str1(uw_context ctx, uw_Basis_char ch) { @@ -2587,7 +2587,7 @@ uw_Basis_string uw_Basis_sqlifyBlob(uw_context ctx, uw_Basis_blob b) { sprintf(s2, "%02X", c); s2 += 2; } - } + } *s2++ = '\''; strcpy(s2, uw_sqlsuffixBlob); @@ -3254,7 +3254,7 @@ static char *find_sig(char *haystack) { if (!s || strlen(haystack) - (s - haystack) - (sizeof sig_intro - 1) < uw_hash_blocksize*2+1) return NULL; - + s += sizeof sig_intro - 1; for (i = 0; i < uw_hash_blocksize*2; ++i) @@ -3667,7 +3667,7 @@ uw_Basis_string uw_unnull(uw_Basis_string s) { uw_Basis_string uw_Basis_makeSigString(uw_context ctx, uw_Basis_string sig) { uw_Basis_string r = uw_malloc(ctx, 2 * uw_hash_blocksize + 1); int i; - + for (i = 0; i < uw_hash_blocksize; ++i) sprintf(&r[2*i], "%.02X", ((unsigned char *)sig)[i]); @@ -3885,7 +3885,7 @@ uw_Basis_string uw_Basis_mstrcat(uw_context ctx, ...) { va_list ap; size_t len = 1; char *s, *r, *s2; - + va_start(ap, ctx); for (s = va_arg(ap, char*); s; s = va_arg(ap, char*)) len += strlen(s); @@ -3930,6 +3930,56 @@ uw_Basis_int uw_Basis_toSeconds(uw_context ctx, uw_Basis_time tm) { return tm.seconds; } +uw_Basis_time uw_Basis_fromDatetime(uw_context ctx, uw_Basis_int year, uw_Basis_int month, uw_Basis_int day, uw_Basis_int hour, uw_Basis_int minute, uw_Basis_int second) { + struct tm tm = { .tm_year = year - 1900, .tm_mon = month, .tm_mday = day, + .tm_hour = hour, .tm_min = minute, .tm_sec = second }; + uw_Basis_time r = { timelocal(&tm) }; + return r; +} + +uw_Basis_int uw_Basis_datetimeYear(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_year + 1900; +} + +uw_Basis_int uw_Basis_datetimeMonth(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_mon; +} + +uw_Basis_int uw_Basis_datetimeDay(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_mday; +} + +uw_Basis_int uw_Basis_datetimeHour(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_hour; +} + +uw_Basis_int uw_Basis_datetimeMinute(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_min; +} + +uw_Basis_int uw_Basis_datetimeSecond(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_sec; +} + +uw_Basis_int uw_Basis_datetimeDayOfWeek(uw_context ctx, uw_Basis_time time) { + struct tm tm; + localtime_r(&time.seconds, &tm); + return tm.tm_wday; +} + + void *uw_get_global(uw_context ctx, char *name) { int i; @@ -4067,7 +4117,7 @@ uw_Basis_int uw_Basis_rand(uw_context ctx) { pthread_mutex_lock(&rand_mutex); int r = RAND_bytes((unsigned char *)&ret, sizeof ret); pthread_mutex_unlock(&rand_mutex); - + if (r) return abs(ret); else diff --git a/src/settings.sml b/src/settings.sml index 020ca5a4..6282577d 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -331,6 +331,16 @@ val jsFuncsBase = basisM [("alert", "alert"), ("toMilliseconds", "toMilliseconds"), ("diffInMilliseconds", "diffInMilliseconds"), + ("fromDatetime", "fromDatetime"), + ("datetimeYear", "datetimeYear"), + ("datetimeMonth", "datetimeMonth"), + ("datetimeDay", "datetimeDay"), + ("datetimeHour", "datetimeHour"), + ("datetimeMinute", "datetimeMinute"), + ("datetimeSecond", "datetimeSecond"), + ("datetimeDayOfWeek", "datetimeDayOfWeek"), + + ("onClick", "uw_onClick"), ("onDblclick", "uw_onDblclick"), ("onKeydown", "uw_onKeydown"), |