annotate gui/util/list.c @ 34664:4df4d842d5fb

Remove global variable pointing to current playlist item. Instead, use the listMgr command to get it.
author ib
date Tue, 21 Feb 2012 19:44:21 +0000
parents 73a5ecb53ee2
children 7c447e9db447
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
1 /*
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
2 * This file is part of MPlayer.
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
3 *
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
7 * (at your option) any later version.
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
8 *
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
12 * GNU General Public License for more details.
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
13 *
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License along
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
17 */
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
18
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
19 #include <stdlib.h>
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
20 #include <string.h>
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
21
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
22 #include "list.h"
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
23 #include "string.h"
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
24
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
25 plItem *plList;
34664
4df4d842d5fb Remove global variable pointing to current playlist item.
ib
parents: 34663
diff changeset
26 static plItem *plCurrent;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
27 plItem *plLastPlayed;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
28
33748
5860cfaff0a4 Cosmetic: Rename URLList urlList.
ib
parents: 33742
diff changeset
29 urlItem *urlList;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
30
34610
4ff933a89818 Cosmetic: Rename functions in list.c.
ib
parents: 34602
diff changeset
31 void *listMgr(int cmd, void *data)
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
32 {
34610
4ff933a89818 Cosmetic: Rename functions in list.c.
ib
parents: 34602
diff changeset
33 plItem *item = (plItem *)data;
4ff933a89818 Cosmetic: Rename functions in list.c.
ib
parents: 34602
diff changeset
34 urlItem *url_item = (urlItem *)data;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
35 int is_added = 1;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
36
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
37 switch (cmd) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
38 // handle playlist
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
39
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
40 // add item to playlist
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
41 case PLAYLIST_ITEM_ADD:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
42 if (plList) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
43 plItem *next = plList;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
44
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
45 while (next->next)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
46 // {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
47 // printf( "%s\n",next->name );
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
48 next = next->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
49 // }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
50
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
51 next->next = item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
52 item->prev = next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
53 item->next = NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
54 } else {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
55 item->prev = item->next = NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
56 plCurrent = plList = item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
57 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
58 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
59
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
60 // add item into playlist after current
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
61 case PLAYLIST_ITEM_INSERT:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
62 if (plCurrent) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
63 plItem *curr = plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
64 item->next = curr->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
65
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
66 if (item->next)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
67 item->next->prev = item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
68
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
69 item->prev = curr;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
70 curr->next = item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
71 plCurrent = plCurrent->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
72
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
73 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
74 } else
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
75 return listMgr(PLAYLIST_ITEM_ADD, item);
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
76
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
77 // get next item from playlist
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
78 case PLAYLIST_ITEM_GET_NEXT:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
79 if (plCurrent && plCurrent->next) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
80 plCurrent = plCurrent->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
81 // if (!plCurrent && plList)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
82 // {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
83 // plItem *next = plList;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
84 //
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
85 // while (next->next)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
86 // {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
87 // if (!next->next) break;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
88 // next = next->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
89 // }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
90 //
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
91 // plCurrent = next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
92 // }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
93 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
94 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
95 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
96
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
97 // get previous item from playlist
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
98 case PLAYLIST_ITEM_GET_PREV:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
99 if (plCurrent && plCurrent->prev) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
100 plCurrent = plCurrent->prev;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
101 // if ( !plCurrent && plList ) plCurrent=plList;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
102 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
103 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
104 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
105
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
106 // set current item
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
107 case PLAYLIST_ITEM_SET_CURR:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
108 plCurrent = item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
109 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
110
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
111 // get current item
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
112 case PLAYLIST_ITEM_GET_CURR:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
113 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
114
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
115 // delete current item
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
116 case PLAYLIST_ITEM_DEL_CURR:
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
117 {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
118 plItem *curr = plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
119
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
120 if (!curr)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
121 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
122
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
123 if (curr->prev)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
124 curr->prev->next = curr->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
125 if (curr->next)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
126 curr->next->prev = curr->prev;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
127 if (curr == plList)
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
128 plList = curr->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
129
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
130 plCurrent = curr->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
131
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
132 // free it
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
133 free(curr->path);
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
134 free(curr->name);
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
135 free(curr);
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
136 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
137 //uiCurr(); // instead of using uiNext && uiPrev
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
138 return plCurrent;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
139
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
140 // delete list
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
141 case PLAYLIST_DELETE:
34602
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
142 while (plList) {
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
143 plItem *next = plList->next;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
144
34602
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
145 free(plList->path);
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
146 free(plList->name);
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
147 free(plList);
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
148
a5d0652dd1a0 Fix bug in freeing playlist items.
ib
parents: 34601
diff changeset
149 plList = next;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
150 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
151 plCurrent = NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
152 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
153
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
154 // handle url
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
155 case URLLIST_ITEM_ADD:
33748
5860cfaff0a4 Cosmetic: Rename URLList urlList.
ib
parents: 33742
diff changeset
156 if (urlList) {
5860cfaff0a4 Cosmetic: Rename URLList urlList.
ib
parents: 33742
diff changeset
157 urlItem *next_url = urlList;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
158 is_added = 0;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
159
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
160 while (next_url->next) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
161 if (!gstrcmp(next_url->url, url_item->url)) {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
162 is_added = 1;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
163 break;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
164 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
165
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
166 next_url = next_url->next;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
167 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
168
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
169 if (!is_added && gstrcmp(next_url->url, url_item->url))
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
170 next_url->next = url_item;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
171 } else {
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
172 url_item->next = NULL;
33748
5860cfaff0a4 Cosmetic: Rename URLList urlList.
ib
parents: 33742
diff changeset
173 urlList = url_item;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
174 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
175 return NULL;
34599
80246b016caf Add code to free the URL list items.
ib
parents: 33748
diff changeset
176
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34627
diff changeset
177 case URLLIST_DELETE:
34599
80246b016caf Add code to free the URL list items.
ib
parents: 33748
diff changeset
178 while (urlList) {
34601
f9b7f4b48fcb Fix bug in freeing URL list items.
ib
parents: 34599
diff changeset
179 urlItem *next = urlList->next;
f9b7f4b48fcb Fix bug in freeing URL list items.
ib
parents: 34599
diff changeset
180
34599
80246b016caf Add code to free the URL list items.
ib
parents: 33748
diff changeset
181 free(urlList->url);
34601
f9b7f4b48fcb Fix bug in freeing URL list items.
ib
parents: 34599
diff changeset
182 free(urlList);
f9b7f4b48fcb Fix bug in freeing URL list items.
ib
parents: 34599
diff changeset
183
f9b7f4b48fcb Fix bug in freeing URL list items.
ib
parents: 34599
diff changeset
184 urlList = next;
34599
80246b016caf Add code to free the URL list items.
ib
parents: 33748
diff changeset
185 }
80246b016caf Add code to free the URL list items.
ib
parents: 33748
diff changeset
186 return NULL;
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
187 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
188
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
189 return NULL;
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
190 }
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33741
diff changeset
191
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
192 /**
34622
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
193 * @brief Set list to @a entry.
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
194 *
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
195 * @param list pointer to the char pointer list
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
196 * @param entry the new (and only) element of the list
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
197 *
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
198 * @note Actually, a new list will be created and the old list will be freed.
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
199 */
34610
4ff933a89818 Cosmetic: Rename functions in list.c.
ib
parents: 34602
diff changeset
200 void listSet(char ***list, const char *entry)
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
201 {
34622
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
202 if (*list) {
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
203 char **l = *list;
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
204
34622
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
205 while (*l) {
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
206 free(*l);
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
207 l++;
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
208 }
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
209
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
210 free(*list);
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
211 }
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
212
34623
f8b848c178e5 Cosmetic: Adjust indent.
ib
parents: 34622
diff changeset
213 *list = malloc(2 * sizeof(char *));
34622
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
214
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
215 if (*list) {
34623
f8b848c178e5 Cosmetic: Adjust indent.
ib
parents: 34622
diff changeset
216 (*list)[0] = gstrdup(entry);
f8b848c178e5 Cosmetic: Adjust indent.
ib
parents: 34622
diff changeset
217 (*list)[1] = NULL;
34622
e96ee4cac59f Revise listSet().
ib
parents: 34610
diff changeset
218 }
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
219 }
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
220
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
221 /**
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
222 * @brief Replace the first element in list that starts with @a search.
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
223 *
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
224 * @note If no such element is found, @a replace will be appended.
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
225 *
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
226 * @param list pointer to the char pointer list
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
227 * @param search element to search
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
228 * @param replace replacement element
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
229 */
34610
4ff933a89818 Cosmetic: Rename functions in list.c.
ib
parents: 34602
diff changeset
230 void listRepl(char ***list, const char *search, const char *replace)
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
231 {
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
232 int i = 0;
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
233 char **org = *list;
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
234
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
235 if (!replace)
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
236 return;
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
237
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
238 if (*list) {
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
239 size_t len = (search ? strlen(search) : 0);
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
240
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
241 for (i = 0; (*list)[i]; i++) {
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
242 if (gstrncmp((*list)[i], search, len) == 0) {
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
243 free((*list)[i]);
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
244 (*list)[i] = strdup(replace);
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
245 return;
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
246 }
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
247 }
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
248
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
249 *list = realloc(*list, (i + 2) * sizeof(char *));
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
250 } else
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
251 *list = malloc(2 * sizeof(char *));
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
252
34627
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
253 if (!*list) {
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
254 *list = org;
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
255 return;
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
256 }
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
257
3482045da618 Revise listRepl().
ib
parents: 34623
diff changeset
258 (*list)[i] = strdup(replace);
33741
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
259 (*list)[i + 1] = NULL;
962dc701989d Create new file list.c for list related functions.
ib
parents:
diff changeset
260 }