unescape xml-characters
This commit is contained in:
		
							parent
							
								
									bdeb4aab96
								
							
						
					
					
						commit
						aa6a4cd36c
					
				
							
								
								
									
										64
									
								
								dunst.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								dunst.c
									
									
									
									
									
								
							| @ -72,6 +72,7 @@ void run(void); | ||||
| void setup(void); | ||||
| void show_win(void); | ||||
| void usage(int exit_status); | ||||
| char *xml_unescape(char *str); | ||||
| 
 | ||||
| #include "dunst_dbus.h" | ||||
| 
 | ||||
| @ -79,7 +80,7 @@ msg_queue_t* | ||||
| append(msg_queue_t *queue, char *msg) { | ||||
|     msg_queue_t *new = malloc(sizeof(msg_queue_t)); | ||||
|     msg_queue_t *last; | ||||
|     new->msg = msg; | ||||
|     new->msg = xml_unescape(msg); | ||||
|     new->start = 0; | ||||
|     printf("%s\n", new->msg); | ||||
|     new->next = NULL; | ||||
| @ -102,6 +103,7 @@ pop(msg_queue_t *queue) { | ||||
|         return NULL; | ||||
|     } | ||||
|     new_head = queue->next; | ||||
|     free(queue->msg); | ||||
|     free(queue); | ||||
|     return new_head; | ||||
| } | ||||
| @ -328,6 +330,64 @@ show_win(void) { | ||||
|     visible = True; | ||||
| } | ||||
| 
 | ||||
| char | ||||
| *xml_unescape(char *str) { | ||||
|     char *tmpString, *strpos, *tmppos; | ||||
| 
 | ||||
|     if(str == NULL) { | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     /* tmpString can never be bigger than str */ | ||||
|     tmpString = (char *) calloc(strlen(str), sizeof(char) + 1); | ||||
|     memset(tmpString, '\0', strlen(tmpString) * sizeof(char) + 1); | ||||
|     tmppos = tmpString; | ||||
|     strpos = str; | ||||
| 
 | ||||
|     while(*strpos != '\0') { | ||||
|         if(*strpos != '&') { | ||||
|             /* not the beginning of an xml-escape */ | ||||
|             *tmppos = *strpos; | ||||
|             strpos++; | ||||
|             tmppos++; | ||||
|             continue; | ||||
|         } | ||||
|         else if(!strncmp(strpos, """, strlen("""))) { | ||||
|             *tmppos = '"'; | ||||
|             tmppos++; | ||||
|             strpos += strlen("""); | ||||
|         } | ||||
|         else if(!strncmp(strpos, "'", strlen("apos;"))) { | ||||
|             *tmppos = '\''; | ||||
|             tmppos++; | ||||
|             strpos += strlen("'"); | ||||
|         } | ||||
|         else if(!strncmp(strpos, "&", strlen("amp;"))) { | ||||
|             *tmppos = '&'; | ||||
|             tmppos++; | ||||
|             strpos += strlen("&") - 1; | ||||
|         } | ||||
|         else if(!strncmp(strpos, "<", strlen("lt;"))) { | ||||
|             *tmppos = '<'; | ||||
|             tmppos++; | ||||
|             strpos += strlen("<") - 1; | ||||
|         } | ||||
|         else if(!strncmp(strpos, ">", strlen("gt;"))) { | ||||
|             *tmppos = '>'; | ||||
|             tmppos++; | ||||
|             strpos += strlen(">") - 1; | ||||
|         } | ||||
|         else { | ||||
|             *tmppos = *strpos; | ||||
|             strpos++; | ||||
|             tmppos++; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     free(str); | ||||
|     return tmpString; | ||||
| } | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) { | ||||
| 
 | ||||
| @ -357,7 +417,7 @@ main(int argc, char *argv[]) { | ||||
|         else if(!strcmp(argv[i], "-to")) | ||||
|             global_timeout = atoi(argv[++i]); | ||||
|         else if(!strcmp(argv[i], "-msg")) { | ||||
|              msgqueue = append(msgqueue, argv[++i]); | ||||
|              msgqueue = append(msgqueue, strdup(argv[++i])); | ||||
|              listen_to_dbus = False; | ||||
|         } | ||||
|         else if(!strcmp(argv[i], "-mon")) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sascha Kruse
						Sascha Kruse