]> git.pld-linux.org Git - packages/links2.git/commitdiff
- better version: without hacking handler type, sub-second resolution,
authorJakub Bogusz <qboosh@pld-linux.org>
Sat, 15 Nov 2003 18:04:09 +0000 (18:04 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
  working new Date(otherdate.getTime())

Changed files:
    links2-js-Date-getTime.patch -> 1.2

links2-js-Date-getTime.patch

index a10cb846666b72956d234cd3382834eb9f2711ba..68feb3f012c5a8c00dfd8660bbdc96c508afb2db 100644 (file)
---- 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:
This page took 0.192507 seconds and 4 git commands to generate.