Fix buffer overflows in eve.c (sf.net #3034056)
[monky] / src / xmms2.c
index c8607e9..521bffa 100644 (file)
@@ -1,4 +1,7 @@
-/* Conky, a system monitor, based on torsmo
+/* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
+ * vim: ts=4 sw=4 noet ai cindent syntax=c
+ *
+ * Conky, a system monitor, based on torsmo
  *
  * Any original torsmo code is licensed under the BSD license
  *
@@ -6,7 +9,7 @@
  *
  * Please see COPYING for details
  *
- * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
+ * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al.
  *     (see AUTHORS)
  * All rights reserved.
  *
@@ -84,14 +87,14 @@ static void xmms_alloc(struct information *ptr)
 void connection_lost(void *p)
 {
        struct information *ptr = p;
-        ptr->xmms2.conn_state = CONN_NO;
+       ptr->xmms2.conn_state = CONN_NO;
 
-        fprintf(stderr,"XMMS2 connection failed. %s\n", xmmsc_get_last_error(xmms2_conn));
+       fprintf(stderr,"XMMS2 connection failed. %s\n", xmmsc_get_last_error(xmms2_conn));
 
-        xmms_alloc(ptr);
-        strncpy(ptr->xmms2.status, "Disocnnected", text_buffer_size - 1);
-        ptr->xmms2.playlist[0] = '\0';
-        ptr->xmms2.id = 0;
+       xmms_alloc(ptr);
+       strncpy(ptr->xmms2.status, "Disocnnected", text_buffer_size - 1);
+       ptr->xmms2.playlist[0] = '\0';
+       ptr->xmms2.id = 0;
 }
 
 
@@ -110,7 +113,7 @@ int handle_curent_id(xmmsv_t *value, void *p)
        if (xmmsv_get_error(value, &errbuf)) {
                fprintf(stderr,"XMMS2 server error. %s\n", errbuf);
                return TRUE;
-               }
+       }
 
        if (xmmsv_get_int(value, &current_id) && current_id > 0) {
 
@@ -135,10 +138,10 @@ int handle_curent_id(xmmsv_t *value, void *p)
 
                if (xmmsv_dict_get(infos, "title", &dict_entry) && xmmsv_get_string(dict_entry, &charval)) 
                        strncpy(ptr->xmms2.title, charval, text_buffer_size - 1);
-       
+
                if (xmmsv_dict_get(infos, "album", &dict_entry) && xmmsv_get_string(dict_entry, &charval)) 
                        strncpy(ptr->xmms2.album, charval, text_buffer_size - 1);
-               
+
                if (xmmsv_dict_get(infos, "genre", &dict_entry) && xmmsv_get_string(dict_entry, &charval))
                        strncpy(ptr->xmms2.genre, charval, text_buffer_size - 1);
 
@@ -150,7 +153,7 @@ int handle_curent_id(xmmsv_t *value, void *p)
 
                if (xmmsv_dict_get(infos, "date", &dict_entry) && xmmsv_get_string(dict_entry, &charval))
                        strncpy(ptr->xmms2.date, charval, text_buffer_size - 1);
-               
+
 
 
                if (xmmsv_dict_get(infos, "tracknr", &dict_entry) && xmmsv_get_int(dict_entry, &intval))
@@ -211,19 +214,20 @@ int handle_playback_state_change(xmmsv_t *value, void *p)
        }
 
        if (xmmsv_get_int(value, &pb_state)) {
-       switch (pb_state) {
-               case XMMS_PLAYBACK_STATUS_PLAY:
-                       strncpy(ptr->xmms2.status, "Playing", text_buffer_size - 1);
-                       break;
-               case XMMS_PLAYBACK_STATUS_PAUSE:
-                       strncpy(ptr->xmms2.status, "Paused", text_buffer_size - 1);
-                       break;
-               case XMMS_PLAYBACK_STATUS_STOP:
-                       strncpy(ptr->xmms2.status, "Stopped", text_buffer_size - 1);
-                       break;
-               default:
-                       strncpy(ptr->xmms2.status, "Unknown", text_buffer_size - 1);
-       }
+               switch (pb_state) {
+                       case XMMS_PLAYBACK_STATUS_PLAY:
+                               strncpy(ptr->xmms2.status, "Playing", text_buffer_size - 1);
+                               break;
+                       case XMMS_PLAYBACK_STATUS_PAUSE:
+                               strncpy(ptr->xmms2.status, "Paused", text_buffer_size - 1);
+                               break;
+                       case XMMS_PLAYBACK_STATUS_STOP:
+                               strncpy(ptr->xmms2.status, "Stopped", text_buffer_size - 1);
+                               ptr->xmms2.elapsed = ptr->xmms2.progress = ptr->xmms2.percent = 0;
+                               break;
+                       default:
+                               strncpy(ptr->xmms2.status, "Unknown", text_buffer_size - 1);
+               }
        }
        return TRUE;
 }
@@ -249,7 +253,7 @@ int handle_playlist_loaded(xmmsv_t *value, void *p)
        return TRUE;
 }
 
-void update_xmms2()
+int update_xmms2(void)
 {
        struct information *current_info = &info;
 
@@ -263,7 +267,7 @@ void update_xmms2()
                /* did init fail? */
                if (xmms2_conn == NULL) {
                        fprintf(stderr,"XMMS2 init failed. %s\n", xmmsc_get_last_error(xmms2_conn));
-                       return;
+                       return 0;
                }
 
                /* init ok but not connected yet.. */
@@ -281,7 +285,7 @@ void update_xmms2()
                if (!xmmsc_connect(xmms2_conn, path)) {
                        fprintf(stderr,"XMMS2 connection failed. %s\n", xmmsc_get_last_error(xmms2_conn));
                        current_info->xmms2.conn_state = CONN_NO;
-                       return;
+                       return 0;
                }
 
                /* set callbacks */
@@ -314,25 +318,8 @@ void update_xmms2()
                if (xmmsc_io_want_out(xmms2_conn))
                        xmmsc_io_out_handle(xmms2_conn);
 
-               }
        }
-
-
-void free_xmms2()
-{
-       struct information *current_info = &info;
-
-       current_info->xmms2.conn_state = -1;
-
-       free(current_info->xmms2.artist);
-       free(current_info->xmms2.album);
-       free(current_info->xmms2.title);
-       free(current_info->xmms2.genre);
-       free(current_info->xmms2.comment);
-       free(current_info->xmms2.url);
-       free(current_info->xmms2.date);
-       free(current_info->xmms2.playlist);
-       free(current_info->xmms2.status);
+       return 0;
 }