---- links-2.1pre7/struct.h.orig Mon Jun 10 01:24:28 2002
-+++ links-2.1pre7/struct.h Thu Dec 26 01:24:58 2002
-@@ -82,7 +82,7 @@
- long mid; /* Jako Mikulasovo ID - to je byro! B;-) */
- long type;
- long value;/*tohle se bude casto typecastovat na pointer*/
-- long handler; /* smysl bude mit jen u vnitrnich pnych */
-+ long long handler; /* smysl bude mit jen u vnitrnich pnych */
- long index; /* smysl ma jen u selectitek */
- struct localnamespace* next;
- }lns;
---- links-2.1pre7/builtin.c.orig Sun Sep 22 10:35:38 2002
-+++ links-2.1pre7/builtin.c Thu Dec 26 01:25:16 2002
-@@ -757,6 +757,7 @@
+--- links-2.1pre14/builtin.c.orig 2003-04-30 10:41:30.000000000 +0200
++++ links-2.1pre14/builtin.c 2003-11-15 18:05:59.987606816 +0100
+@@ -15,6 +15,10 @@
+ #undef __USE_XOPEN
+ #include <ctype.h>
+
++#ifdef HAVE_SYS_TIME_H
++#include <sys/time.h>
++#endif
++
+ #ifdef JS
+
+ #define PREFIX 0x40
+@@ -704,17 +708,36 @@
+ */
+
+ static struct tm * casek;
++static unsigned short casek_msec;
+
+ int vartoint(lns*pna,js_context*context);
+
++/* sets casek and casek_msec acc. to localtime */
++void casek_localtime(void)
++{ time_t*cas=js_mem_alloc(sizeof(time_t));
++#ifdef HAVE_GETTIMEOFDAY
++ struct timeval *tv=js_mem_alloc(sizeof(struct timeval));
++ int res;
++ if(!(res = gettimeofday(tv, NULL))) {
++ *cas=tv->tv_sec;
++ casek_msec=tv->tv_usec/1000;
++ }
++ js_mem_free(tv);
++ if(res) /* gettimeofday() failed, fallback to time() */
++#endif
++ {
++ time(cas);
++ casek_msec=0;
++ }
++ casek=localtime(cas);
++ js_mem_free(cas);
++}
++
+ void sezer_zizalu(char*argv,js_context*context)
+ { char*naargy=js_mem_alloc(strlen(argv)+2);
+- time_t*cas=js_mem_alloc(sizeof(time_t));
++ casek_localtime();
+ strcpy(naargy,argv);
+ strcat(naargy,"~");
+- time(cas);
+- casek=localtime(cas);
+- js_mem_free(cas);
+ #ifdef HAVE_STRPTIME
+ if(naargy[0]>57)/*Je to mon,day,year...*/
+ { if(!strptime(naargy,"%h %d, %Y, %R:%S~",casek))
+@@ -756,7 +779,6 @@
+ long pomint, pomint1=0, pomint2;
long*pompointer;
int i=0,j=0;
- time_t*cas;
-+ time_t temptime;
+- time_t*cas;
char pomchar;
plns*pomns;
-@@ -1240,12 +1241,14 @@
+@@ -1237,18 +1259,20 @@
+ { sezer_zizalu((char*)pomarg->argument,context);
+ js_mem_free(pomarg);
+ }
+- else{ pomint1=to32int(pomarg,context);
++ else{ float pomf=rint(tofloat(pomarg,context));
++ /* can be >32 bits */
if(!(pomarg=getarg(&argy)))
- {/* pomint=to32int(pomarg,context);*/
- time_t t = (time_t)pomint1;
-+ temptime = t;
+- {/* pomint=to32int(pomarg,context);*/
+- time_t t = (time_t)pomint1;
++ {
++ /* milliseconds since Epoch */
++ time_t t = (time_t)(pomf/1000);
casek=localtime(&t);
++ casek_msec=((long long)pomf)%1000;
/* Je to doba od usvitu dejin a aby toho nebylo malo tak v sekundach :-( */
}
else
- { cas=js_mem_alloc(sizeof(time_t));
- time(cas);
-+ temptime=*cas;
- casek=localtime(cas);
- js_mem_free(cas);
+- { cas=js_mem_alloc(sizeof(time_t));
+- time(cas);
+- casek=localtime(cas);
+- js_mem_free(cas);
++ {
++ pomint1=(int)pomf;
++ casek_localtime();
casek->tm_year=pomint1;
-@@ -1264,6 +1267,7 @@
+ casek->tm_mon=to32int(pomarg,context);
+ if((pomarg=getarg(&argy)))
+@@ -1263,10 +1287,8 @@
+ js_error("Missing day!",context);
+ }
}
- } else{ cas=js_mem_alloc(sizeof(time_t));
- *cas=time(0);
-+ temptime=*cas;
- casek=localtime(cas);
- js_mem_free(cas);
+- } else{ cas=js_mem_alloc(sizeof(time_t));
+- *cas=time(0);
+- casek=localtime(cas);
+- js_mem_free(cas);
++ } else{
++ casek_localtime();
if(pomarg) delarg(pomarg,context);
-@@ -1296,10 +1296,10 @@
+ }
+ /* Hopla mizero - a mame casek */
+@@ -1297,10 +1319,17 @@
BUILDFCE("getSeconds",CgetSeconds);
pomvar->handler=(long)pompointer;
BUILDFCE("setTime",CsetTime);
- pomvar->handler=casek->tm_sec;
-+ pomvar->handler=((long long)temptime) * 1000;
- pompointer=&pomvar->handler;
+- pompointer=&pomvar->handler;
++ /* float because (long) int is too small on 32-bit machines */
++ pomfloat=js_mem_alloc(sizeof(float));
++ *pomfloat=((float)mktime(casek))*1000 + casek_msec;
++ /* embed it in variable to avoid memory leaks - is any better way? */
++ pomvar1=buildin("settimetempval",context->namespace,context->lnamespace,context);
++ pomvar1->type=INTVAR;
++ pomvar1->value=pomvar->mid=0;
++ pomvar1->handler=(long)pomfloat;
++ pomvar->handler=(long)pomfloat;
BUILDFCE("getTime",CgetTime);
- pomvar->handler=(long)pomns;
-+ pomvar->handler=(long)pompointer;
++ pomvar->handler=(long)pomfloat;
BUILDFCE("setYear",CsetYear);
pomvar->handler=casek->tm_year;
pompointer=&(pomvar->handler);
-@@ -2202,8 +2206,9 @@
+@@ -2211,13 +2240,14 @@
+ idebug("CsetTime called ");
+ if(!(pomarg=getarg(&argy)))
+ js_error("setTime function requires argument!",context);
+- else variable->handler=to32int(pomarg,context);
++ else *(float*)(variable->handler)=tofloat(pomarg,context);
+ idebug("and exited!\n");
break;
case CgetTime:
idebug("CgetTime called ");
- retval=*(long*)variable->handler;
+ rettype=FLOAT;
+ retval=(long)js_mem_alloc(sizeof(float));
-+ *(float*)retval=*(long long*)variable->handler;
++ *(float*)retval=*(float*)variable->handler;
idebug("and exited!\n");
break;
case CsetYear: