epgcache.cpp: fix typo
[enigma2.git] / lib / dvb / epgcache.cpp
index 5069e8c3849b07b73c0437187d47c17e95161a54..2dc36412d5fbdaa2a3dc1d8ced90755e95afab9c 100644 (file)
@@ -479,7 +479,12 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
        int eit_event_size;
        int duration;
 
-       time_t TM = parseDVBtime( eit_event->start_time_1, eit_event->start_time_2,     eit_event->start_time_3, eit_event->start_time_4, eit_event->start_time_5);
+       time_t TM = parseDVBtime(
+                       eit_event->start_time_1,
+                       eit_event->start_time_2,
+                       eit_event->start_time_3,
+                       eit_event->start_time_4,
+                       eit_event->start_time_5);
        time_t now = ::time(0);
 
        if ( TM != 3599 && TM > -1)
@@ -494,6 +499,7 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
 
        while (ptr<len)
        {
+               __u16 event_hash;
                eit_event_size = HILO(eit_event->descriptors_loop_length)+EIT_LOOP_SIZE;
 
                duration = fromBCD(eit_event->duration_1)*3600+fromBCD(eit_event->duration_2)*60+fromBCD(eit_event->duration_3);
@@ -502,7 +508,8 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
                        eit_event->start_time_2,
                        eit_event->start_time_3,
                        eit_event->start_time_4,
-                       eit_event->start_time_5);
+                       eit_event->start_time_5,
+                       &event_hash);
 
                if ( TM == 3599 )
                        goto next;
@@ -513,16 +520,24 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
                if ( now <= (TM+duration) || TM == 3599 /*NVOD Service*/ )  // old events should not be cached
                {
                        __u16 event_id = HILO(eit_event->event_id);
-//                     eDebug("event_id is %d sid is %04x", event_id, service.sid);
-
                        eventData *evt = 0;
                        int ev_erase_count = 0;
                        int tm_erase_count = 0;
 
+                       if (event_id == 0) {
+                               // hack for some polsat services on 13.0E..... but this also replaces other valid event_ids with value 0..
+                               // but we dont care about it...
+                               event_id = event_hash;
+                               eit_event->event_id_hi = event_hash >> 8;
+                               eit_event->event_id_lo = event_hash & 0xFF;
+                       }
+
                        // search in eventmap
                        eventMap::iterator ev_it =
                                servicemap.first.find(event_id);
 
+//                     eDebug("event_id is %d sid is %04x", event_id, service.sid);
+
                        // entry with this event_id is already exist ?
                        if ( ev_it != servicemap.first.end() )
                        {
@@ -1702,6 +1717,7 @@ void fillTuple(ePyObject tuple, const char *argstring, int argcount, ePyObject s
                                ++argcount;
                                continue;
                        default:  // ignore unknown
+                               tmp = ePyObject();
                                eDebug("fillTuple unknown '%c'... insert 'None' in result", c);
                }
                if (!tmp)
@@ -2046,6 +2062,7 @@ void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData
                                inc_refcount = true;
                                break;
                        default:  // ignore unknown
+                               tmp = ePyObject();
                                eDebug("fillTuple2 unknown '%c'... insert None in Result", argstring[pos]);
                }
                if (!tmp)
@@ -2653,7 +2670,7 @@ void eEPGCache::privateSectionRead(const uniqueEPGKey &current_service, const __
                        }
                }
        }
-       ASSERT(pdescr <= &descriptors[65])
+       ASSERT(pdescr <= &descriptors[65]);
        __u8 event[4098];
        eit_event_struct *ev_struct = (eit_event_struct*) event;
        ev_struct->running_status = 0;
@@ -2796,6 +2813,7 @@ void eEPGCache::channel_data::timeMHW2DVB( int minutes, u_char *return_time)
 void eEPGCache::channel_data::timeMHW2DVB( u_char day, u_char hours, u_char minutes, u_char *return_time)
 // For date plus time of day
 {
+       char tz_saved[1024];
        // Remove offset in mhw time.
        __u8 local_hours = hours;
        if ( hours >= 16 )
@@ -2808,6 +2826,8 @@ void eEPGCache::channel_data::timeMHW2DVB( u_char day, u_char hours, u_char minu
        time_t dt = ::time(0);
 
        char *old_tz = getenv( "TZ" );
+       if (old_tz)
+               strcpy(tz_saved, old_tz);
        putenv("TZ=CET-1CEST,M3.5.0/2,M10.5.0/3");
        tzset();
 
@@ -2830,7 +2850,7 @@ void eEPGCache::channel_data::timeMHW2DVB( u_char day, u_char hours, u_char minu
        if ( old_tz == NULL )
                unsetenv( "TZ" );
        else
-               putenv( old_tz );
+               setenv("TZ", tz_saved, 1);
        tzset();
 
        // Calculate MJD according to annex in ETSI EN 300 468