Compare commits
	
		
			3 Commits
		
	
	
		
			8386af0420
			...
			8a8437634a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						8a8437634a
	
				 | 
					
					
						|||
| 
						
						
							
						
						e78b410a6a
	
				 | 
					
					
						|||
| 
						
						
							
						
						bf44e827e8
	
				 | 
					
					
						
@@ -1381,7 +1381,7 @@ struct mpd_client
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Protocol:
 | 
						// Protocol:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool got_hello;                     ///< Got the OK MPD hello message
 | 
						char *got_hello;                    ///< Version from OK MPD hello message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool idling;                        ///< Sent idle as the last command
 | 
						bool idling;                        ///< Sent idle as the last command
 | 
				
			||||||
	unsigned idling_subsystems;         ///< Subsystems we're idling for
 | 
						unsigned idling_subsystems;         ///< Subsystems we're idling for
 | 
				
			||||||
@@ -1482,7 +1482,7 @@ mpd_client_reset (struct mpd_client *self)
 | 
				
			|||||||
	str_reset (&self->read_buffer);
 | 
						str_reset (&self->read_buffer);
 | 
				
			||||||
	str_reset (&self->write_buffer);
 | 
						str_reset (&self->write_buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	self->got_hello = false;
 | 
						cstr_set (&self->got_hello, NULL);
 | 
				
			||||||
	self->idling = false;
 | 
						self->idling = false;
 | 
				
			||||||
	self->idling_subsystems = 0;
 | 
						self->idling_subsystems = 0;
 | 
				
			||||||
	self->in_list = false;
 | 
						self->in_list = false;
 | 
				
			||||||
@@ -1549,7 +1549,8 @@ mpd_client_parse_hello (struct mpd_client *self, const char *line)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// TODO: call "on_connected" now.  We should however also set up a timer
 | 
						// TODO: call "on_connected" now.  We should however also set up a timer
 | 
				
			||||||
	//   so that we don't wait on this message forever.
 | 
						//   so that we don't wait on this message forever.
 | 
				
			||||||
	return self->got_hello = true;
 | 
						cstr_set (&self->got_hello, xstrdup (line + sizeof hello - 1));
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool
 | 
					static bool
 | 
				
			||||||
@@ -1634,30 +1635,30 @@ mpd_client_on_ready (const struct pollfd *pfd, void *user_data)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
					// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool
 | 
					 | 
				
			||||||
mpd_client_must_quote_char (char c)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return (unsigned char) c <= ' ' || c == '"' || c == '\'';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool
 | 
					static bool
 | 
				
			||||||
mpd_client_must_quote (const char *s)
 | 
					mpd_client_must_quote (const char *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!*s)
 | 
						if (!*s)
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	for (; *s; s++)
 | 
						for (; *s; s++)
 | 
				
			||||||
		if (mpd_client_must_quote_char (*s))
 | 
							if ((unsigned char) *s <= ' ' || *s == '"' || *s == '\'')
 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool
 | 
				
			||||||
 | 
					mpd_client_must_escape_in_quote (char c)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return c == '"' || c == '\'' || c == '\\';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
mpd_client_quote (const char *s, struct str *output)
 | 
					mpd_client_quote (const char *s, struct str *output)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	str_append_c (output, '"');
 | 
						str_append_c (output, '"');
 | 
				
			||||||
	for (; *s; s++)
 | 
						for (; *s; s++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (mpd_client_must_quote_char (*s))
 | 
							if (mpd_client_must_escape_in_quote (*s))
 | 
				
			||||||
			str_append_c (output, '\\');
 | 
								str_append_c (output, '\\');
 | 
				
			||||||
		str_append_c (output, *s);
 | 
							str_append_c (output, *s);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,12 +24,12 @@
 | 
				
			|||||||
// It is surprisingly hard to find a good library to handle Unicode shenanigans,
 | 
					// It is surprisingly hard to find a good library to handle Unicode shenanigans,
 | 
				
			||||||
// and there's enough of those for it to be impractical to reimplement them.
 | 
					// and there's enough of those for it to be impractical to reimplement them.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//                         GLib          ICU     libunistring    utf8proc
 | 
					//                        GLib        ICU   libunistring  utf8proc libgrapheme
 | 
				
			||||||
// Decently sized            .            .            x            x
 | 
					// Decently sized           .          .          x          x          x
 | 
				
			||||||
// Grapheme breaks           .            x            .            x
 | 
					// Grapheme breaks          .          x          .          x          x
 | 
				
			||||||
// Character width           x            .            x            x
 | 
					// Character width          x          .          x          x          .
 | 
				
			||||||
// Locale handling           .            .            x            .
 | 
					// Locale handling          .          .          x          .          .
 | 
				
			||||||
// Liberal license           .            x            .            x
 | 
					// Liberal license          .          x          .          x          x
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Also note that the ICU API is icky and uses UTF-16 for its primary encoding.
 | 
					// Also note that the ICU API is icky and uses UTF-16 for its primary encoding.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user