mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	ioline: add length to callback
This is required to be able to skip over a HTTP/RTSP body which might contain nul bytes. Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/820>
This commit is contained in:
		
							parent
							
								
									c1990dd026
								
							
						
					
					
						commit
						fa8943c80e
					
				
					 6 changed files with 11 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -49,7 +49,7 @@ struct userdata {
 | 
			
		|||
    pa_ioline *line;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, size_t l, void *userdata) {
 | 
			
		||||
    struct userdata *u = userdata;
 | 
			
		||||
    pa_module *m = NULL;
 | 
			
		||||
    unsigned devnum;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -187,7 +187,7 @@ static void headers_read(pa_rtsp_client *c) {
 | 
			
		|||
    c->callback(c, c->state, c->status, c->response_headers, c->userdata);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, size_t l, void *userdata) {
 | 
			
		||||
    pa_rtsp_client *c = userdata;
 | 
			
		||||
    char *delimpos;
 | 
			
		||||
    char *s2, *s2p;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ struct pa_cli {
 | 
			
		|||
    char *last_line;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, void *userdata);
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, size_t l, void *userdata);
 | 
			
		||||
static void client_kill(pa_client *c);
 | 
			
		||||
 | 
			
		||||
pa_cli* pa_cli_new(pa_core *core, pa_iochannel *io, pa_module *m) {
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +117,7 @@ static void client_kill(pa_client *client) {
 | 
			
		|||
        c->eof_callback(c, c->userdata);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, size_t l, void *userdata) {
 | 
			
		||||
    pa_strbuf *buf;
 | 
			
		||||
    pa_cli *c = userdata;
 | 
			
		||||
    char *p;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -227,14 +227,14 @@ static void failure(pa_ioline *l, bool process_leftover) {
 | 
			
		|||
        /* Pass the last missing bit to the client */
 | 
			
		||||
 | 
			
		||||
        if (l->callback) {
 | 
			
		||||
            char *p = pa_xstrndup(l->rbuf+l->rbuf_index, l->rbuf_valid_length);
 | 
			
		||||
            l->callback(l, p, l->userdata);
 | 
			
		||||
            char *p = pa_xmemdup(l->rbuf+l->rbuf_index, l->rbuf_valid_length);
 | 
			
		||||
            l->callback(l, p, l->rbuf_valid_length, l->userdata);
 | 
			
		||||
            pa_xfree(p);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (l->callback) {
 | 
			
		||||
        l->callback(l, NULL, l->userdata);
 | 
			
		||||
        l->callback(l, NULL, 0, l->userdata);
 | 
			
		||||
        l->callback = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +256,7 @@ static void scan_for_lines(pa_ioline *l, size_t skip) {
 | 
			
		|||
        *e = 0;
 | 
			
		||||
 | 
			
		||||
        p = l->rbuf + l->rbuf_index;
 | 
			
		||||
        m = strlen(p);
 | 
			
		||||
        m = e - p;
 | 
			
		||||
 | 
			
		||||
        l->rbuf_index += m+1;
 | 
			
		||||
        l->rbuf_valid_length -= m+1;
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ static void scan_for_lines(pa_ioline *l, size_t skip) {
 | 
			
		|||
            l->rbuf_index = 0;
 | 
			
		||||
 | 
			
		||||
        if (l->callback)
 | 
			
		||||
            l->callback(l, pa_strip_nl(p), l->userdata);
 | 
			
		||||
            l->callback(l, pa_strip_nl(p), m, l->userdata);
 | 
			
		||||
 | 
			
		||||
        skip = 0;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
 | 
			
		||||
typedef struct pa_ioline pa_ioline;
 | 
			
		||||
 | 
			
		||||
typedef void (*pa_ioline_cb_t)(pa_ioline*io, const char *s, void *userdata);
 | 
			
		||||
typedef void (*pa_ioline_cb_t)(pa_ioline*io, const char *s, size_t l, void *userdata);
 | 
			
		||||
typedef void (*pa_ioline_drain_cb_t)(pa_ioline *io, void *userdata);
 | 
			
		||||
 | 
			
		||||
pa_ioline* pa_ioline_new(pa_iochannel *io);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -629,7 +629,7 @@ static void handle_url(struct connection *c) {
 | 
			
		|||
        html_response(c, 404, "Not Found", NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 | 
			
		||||
static void line_callback(pa_ioline *line, const char *s, size_t l, void *userdata) {
 | 
			
		||||
    struct connection *c = userdata;
 | 
			
		||||
    pa_assert(line);
 | 
			
		||||
    pa_assert(c);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue