Mercurial > audlegacy
comparison audacious/controlsocket.c @ 1582:d7af2755a397 trunk
[svn] - gcc 4.1.0, 4.1.1, 4.1.2 tree optimization workaround:
Remove read_all() and write_all() routines. They had no effect nor merit here, and generally caused trouble.
author | nenolod |
---|---|
date | Mon, 14 Aug 2006 17:55:44 -0700 |
parents | dae6b30c0148 |
children | 58f3eb64f390 |
comparison
equal
deleted
inserted
replaced
1581:68aec931b0b6 | 1582:d7af2755a397 |
---|---|
240 started = TRUE; | 240 started = TRUE; |
241 g_cond_signal(start_cond); | 241 g_cond_signal(start_cond); |
242 g_mutex_unlock(status_mutex); | 242 g_mutex_unlock(status_mutex); |
243 } | 243 } |
244 | 244 |
245 static gint | |
246 write_all(gint fd, gconstpointer buf, size_t count) | |
247 { | |
248 size_t left = count; | |
249 gint written; | |
250 | |
251 do { | |
252 if ((written = write(fd, buf, left)) < 0) { | |
253 count = -1; | |
254 break; | |
255 } | |
256 left -= written; | |
257 buf = (gchar *) buf + written; | |
258 } | |
259 while (left > 0); | |
260 | |
261 return count - left; | |
262 } | |
263 | |
264 static void | 245 static void |
265 ctrl_write_packet(gint fd, gpointer data, gint length) | 246 ctrl_write_packet(gint fd, gpointer data, gint length) |
266 { | 247 { |
267 ServerPktHeader pkthdr; | 248 ServerPktHeader pkthdr; |
268 | 249 |
269 pkthdr.version = XMMS_PROTOCOL_VERSION; | 250 pkthdr.version = XMMS_PROTOCOL_VERSION; |
270 pkthdr.data_length = length; | 251 pkthdr.data_length = length; |
271 if ((size_t)write_all(fd, &pkthdr, sizeof(ServerPktHeader)) < sizeof(pkthdr)) | 252 if ((size_t)write(fd, &pkthdr, sizeof(ServerPktHeader)) < sizeof(pkthdr)) |
272 return; | 253 return; |
273 if (data && length > 0) | 254 if (data && length > 0) |
274 write_all(fd, data, length); | 255 write(fd, data, length); |
275 } | 256 } |
276 | 257 |
277 static void | 258 static void |
278 ctrl_write_gint(gint fd, gint val) | 259 ctrl_write_gint(gint fd, gint val) |
279 { | 260 { |
304 ctrl_write_packet(pkt->fd, NULL, 0); | 285 ctrl_write_packet(pkt->fd, NULL, 0); |
305 close(pkt->fd); | 286 close(pkt->fd); |
306 if (pkt->data) | 287 if (pkt->data) |
307 g_free(pkt->data); | 288 g_free(pkt->data); |
308 g_free(pkt); | 289 g_free(pkt); |
309 } | |
310 | |
311 static gint | |
312 read_all(gint fd, gpointer buf, size_t count) | |
313 { | |
314 size_t left = count; | |
315 GTimer *timer; | |
316 gulong usec; | |
317 gint r; | |
318 | |
319 timer = g_timer_new(); | |
320 | |
321 do { | |
322 if ((r = read(fd, buf, left)) < 0) { | |
323 count = -1; | |
324 break; | |
325 } | |
326 left -= r; | |
327 buf = (gchar *) buf + r; | |
328 g_timer_elapsed(timer, &usec); | |
329 } | |
330 while (left > 0 && usec <= CTRLSOCKET_IO_TIMEOUT_USEC); | |
331 | |
332 g_timer_destroy(timer); | |
333 return count - left; | |
334 } | 290 } |
335 | 291 |
336 static gboolean | 292 static gboolean |
337 ctrlsocket_is_going(void) | 293 ctrlsocket_is_going(void) |
338 { | 294 { |
373 continue; | 329 continue; |
374 if ((fd = accept(ctrl_fd, (struct sockaddr *) &saddr, &len)) == -1) | 330 if ((fd = accept(ctrl_fd, (struct sockaddr *) &saddr, &len)) == -1) |
375 continue; | 331 continue; |
376 | 332 |
377 pkt = g_new0(PacketNode, 1); | 333 pkt = g_new0(PacketNode, 1); |
378 if ((size_t)read_all(fd, &pkt->hdr, sizeof(ClientPktHeader)) | 334 if ((size_t)read(fd, &pkt->hdr, sizeof(ClientPktHeader)) |
379 < sizeof(ClientPktHeader)) { | 335 < sizeof(ClientPktHeader)) { |
380 g_free(pkt); | 336 g_free(pkt); |
381 continue; | 337 continue; |
382 } | 338 } |
383 | 339 |
384 if (pkt->hdr.data_length) { | 340 if (pkt->hdr.data_length) { |
385 size_t data_length = pkt->hdr.data_length; | 341 size_t data_length = pkt->hdr.data_length; |
386 pkt->data = g_malloc0(data_length); | 342 pkt->data = g_malloc0(data_length); |
387 if ((size_t)read_all(fd, pkt->data, data_length) < data_length) { | 343 if ((size_t)read(fd, pkt->data, data_length) < data_length) { |
388 g_free(pkt->data); | 344 g_free(pkt->data); |
389 g_free(pkt); | 345 g_free(pkt); |
390 g_warning("ctrlsocket_func(): Incomplete data packet dropped"); | 346 g_warning("ctrlsocket_func(): Incomplete data packet dropped"); |
391 continue; | 347 continue; |
392 } | 348 } |