Mercurial > mplayer.hg
annotate libvo/vo_mpegpes.c @ 35394:7bad316da87a
stream ftp: Pass full buffer size to snprintf
Previously the buffer size was always passed as one less than
the underlying buffer's size. This is not using the underlying
buffer to its full potential according to the C99 standard. The
last byte of the buffers were never used.
No vulnerabilities should have been caused by this mistake because
the strings stored in the buffers were zero terminated at all
times. Neither were out-of-array writes nor reads possible.
author | al |
---|---|
date | Mon, 26 Nov 2012 23:36:00 +0000 |
parents | d7d180520491 |
children | 5d3f93051de9 |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
1 /* |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
2 * based on: test_av.c - test program for new API |
1876 | 3 * |
4 * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> | |
5 * & Marcus Metzler <marcus@convergence.de> | |
6 * for convergence integrated media GmbH | |
7 * | |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
8 * MPEG-PS multiplexer, part of FFmpeg |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
9 * Copyright Gerard Lantau (see http://ffmpeg.org) |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
10 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
11 * This file is part of MPlayer. |
1876 | 12 * |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
13 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
14 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
15 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
16 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
17 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
18 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
21 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
22 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
23 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
24 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
1876 | 26 */ |
1871 | 27 |
6239 | 28 #include "config.h" |
1871 | 29 #include <stdio.h> |
30 #include <stdlib.h> | |
31 #include <string.h> | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
32 #include <errno.h> |
1876 | 33 #include <sys/types.h> |
34 #include <sys/stat.h> | |
35 #include <fcntl.h> | |
6239 | 36 #include <unistd.h> |
1876 | 37 |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
38 #include "mp_msg.h" |
27369
8598536ca4f5
Set HAVE_DVB in configure when HAVE_DVB_HEAD is defined
diego
parents:
27368
diff
changeset
|
39 |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
40 #ifdef CONFIG_DVB |
8594 | 41 #define true 1 |
42 #define false 0 | |
27431
bb738b9ea7c4
Use '#include <poll.h>' instead of '#include <sys/poll.h>'.
diego
parents:
27430
diff
changeset
|
43 #include <poll.h> |
8594 | 44 |
45 #include <sys/ioctl.h> | |
46 #include <stdio.h> | |
47 #include <time.h> | |
48 | |
49 #include <linux/dvb/dmx.h> | |
50 #include <linux/dvb/frontend.h> | |
51 #include <linux/dvb/video.h> | |
52 #include <linux/dvb/audio.h> | |
53 #endif | |
1876 | 54 |
1871 | 55 #include "config.h" |
56 #include "video_out.h" | |
57 #include "video_out_internal.h" | |
19148
3b839a8d297a
simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents:
16171
diff
changeset
|
58 #include "libmpdemux/mpeg_packetizer.h" |
1871 | 59 |
1872 | 60 int vo_mpegpes_fd=-1; |
32070 | 61 extern int ao_mpegpes_fd; |
1872 | 62 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
63 static const vo_info_t info = |
1871 | 64 { |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
65 #ifdef CONFIG_DVB |
27368 | 66 "MPEG-PES to DVB card", |
1876 | 67 #else |
27368 | 68 "MPEG-PES file", |
1876 | 69 #endif |
70 "mpegpes", | |
1871 | 71 "A'rpi", |
72 "" | |
73 }; | |
74 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
75 const LIBVO_EXTERN (mpegpes) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7860
diff
changeset
|
76 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
77 static int |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13048
diff
changeset
|
78 config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t flags, char *title, uint32_t format) |
1871 | 79 { |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
80 #ifdef CONFIG_DVB |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
81 switch(s_height){ |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
82 case 288: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
83 case 576: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
84 case 240: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
85 case 480: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
86 break; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
87 default: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
88 mp_msg(MSGT_VO,MSGL_ERR,"DVB: height=%d not supported (try 240/480 (ntsc) or 288/576 (pal)\n",s_height); |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
89 return -1; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
90 } |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
91 #endif |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
92 return 0; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
93 } |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
94 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
95 static int preinit(const char *arg){ |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
96 #ifdef CONFIG_DVB |
25558
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
97 int card = -1; |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
98 char vo_file[30], ao_file[30], *tmp; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
99 |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
100 if(arg != NULL){ |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
101 if((tmp = strstr(arg, "card=")) != NULL) { |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
102 card = atoi(&tmp[5]); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
103 if((card < 1) || (card > 4)) { |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
104 mp_msg(MSGT_VO, MSGL_ERR, "DVB card number must be between 1 and 4\n"); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
105 return -1; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
106 } |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
107 card--; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
108 arg = NULL; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
109 } |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
110 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
111 |
7672
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
112 if(!arg){ |
1876 | 113 //|O_NONBLOCK |
25558
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
114 //search the first usable card |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
115 if(card==-1) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
116 int n; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
117 for(n=0; n<4; n++) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
118 sprintf(vo_file, "/dev/dvb/adapter%d/video0", n); |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
119 if(access(vo_file, F_OK | W_OK)==0) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
120 card = n; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
121 break; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
122 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
123 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
124 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
125 if(card==-1) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
126 mp_msg(MSGT_VO,MSGL_INFO, "Couldn't find a usable dvb video device, exiting\n"); |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
127 return -1; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
128 } |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
129 mp_msg(MSGT_VO,MSGL_INFO, "Opening /dev/dvb/adapter%d/video0+audio0\n", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
130 sprintf(vo_file, "/dev/dvb/adapter%d/video0", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
131 sprintf(ao_file, "/dev/dvb/adapter%d/audio0", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
132 if((vo_mpegpes_fd = open(vo_file,O_RDWR)) < 0){ |
8594 | 133 perror("DVB VIDEO DEVICE: "); |
134 return -1; | |
135 } | |
1876 | 136 if ( (ioctl(vo_mpegpes_fd,VIDEO_SET_BLANK, false) < 0)){ |
137 perror("DVB VIDEO SET BLANK: "); | |
138 return -1; | |
139 } | |
140 if ( (ioctl(vo_mpegpes_fd,VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)){ | |
141 perror("DVB VIDEO SELECT SOURCE: "); | |
142 return -1; | |
143 } | |
144 if ( (ioctl(vo_mpegpes_fd,VIDEO_PLAY) < 0)){ | |
145 perror("DVB VIDEO PLAY: "); | |
146 return -1; | |
147 } | |
7672
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
148 return 0; |
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
149 } |
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
150 #endif |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
151 arg = (arg ? arg : "grab.mpg"); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
152 mp_msg(MSGT_VO,MSGL_INFO, "Saving PES stream to %s\n", arg); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
153 vo_mpegpes_fd=open(arg,O_WRONLY|O_CREAT,0666); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
154 if(vo_mpegpes_fd<0){ |
1872 | 155 perror("vo_mpegpes"); |
156 return -1; | |
157 } | |
1871 | 158 return 0; |
159 } | |
160 | |
161 | |
162 static void draw_osd(void) | |
163 { | |
164 } | |
165 | |
1876 | 166 |
31428 | 167 static int my_write(const unsigned char* data,int len){ |
19153 | 168 int orig_len = len; |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
169 #ifdef CONFIG_DVB |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
170 #define NFD 2 |
1876 | 171 struct pollfd pfd[NFD]; |
172 | |
173 // printf("write %d bytes \n",len); | |
174 | |
175 pfd[0].fd = vo_mpegpes_fd; | |
176 pfd[0].events = POLLOUT; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
177 |
32070 | 178 pfd[1].fd = ao_mpegpes_fd; |
1876 | 179 pfd[1].events = POLLOUT; |
180 | |
1872 | 181 while(len>0){ |
1876 | 182 if (poll(pfd,NFD,1)){ |
183 if (pfd[0].revents & POLLOUT){ | |
184 int ret=write(vo_mpegpes_fd,data,len); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
185 // printf("ret=%d \n",ret); |
1876 | 186 if(ret<=0){ |
187 perror("write"); | |
188 usleep(0); | |
189 } else { | |
190 len-=ret; data+=ret; | |
191 } | |
192 } else usleep(1000); | |
193 } | |
1872 | 194 } |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
195 |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
196 #else |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
197 write(vo_mpegpes_fd,data,len); // write to file |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
198 #endif |
19150 | 199 return orig_len; |
1872 | 200 } |
1871 | 201 |
30556
358ac046eccc
libvo: Mark functions not used outside of their files as static.
diego
parents:
29263
diff
changeset
|
202 static void send_pes_packet(unsigned char* data, int len, int id, int timestamp) |
358ac046eccc
libvo: Mark functions not used outside of their files as static.
diego
parents:
29263
diff
changeset
|
203 { |
19148
3b839a8d297a
simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents:
16171
diff
changeset
|
204 send_mpeg_pes_packet (data, len, id, timestamp, 1, my_write); |
1876 | 205 } |
206 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
207 static int draw_frame(uint8_t * src[]) |
1871 | 208 { |
1872 | 209 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
210 send_pes_packet(p->data,p->size,p->id,(p->timestamp>0)?p->timestamp:vo_pts); // video data |
1871 | 211 return 0; |
212 } | |
213 | |
1935 | 214 static void flip_page (void) |
215 { | |
216 } | |
217 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
218 static int draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x0,int y0) |
1935 | 219 { |
220 return 0; | |
221 } | |
222 | |
223 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
224 static int |
1871 | 225 query_format(uint32_t format) |
226 { | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13048
diff
changeset
|
227 if(format==IMGFMT_MPEGPES) return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_TIMER; |
1871 | 228 return 0; |
229 } | |
230 | |
231 static void | |
232 uninit(void) | |
233 { | |
32070 | 234 if(ao_mpegpes_fd >= 0 && ao_mpegpes_fd != vo_mpegpes_fd) close(ao_mpegpes_fd); |
33709 | 235 ao_mpegpes_fd = -1; |
1876 | 236 if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;} |
1871 | 237 } |
238 | |
239 | |
240 static void check_events(void) | |
241 { | |
242 } | |
243 | |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
32070
diff
changeset
|
244 static int control(uint32_t request, void *data) |
4352 | 245 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
246 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
247 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
248 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
249 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
250 return VO_NOTIMPL; |
4352 | 251 } |