diff options
| -rw-r--r-- | commands.c | 6 | ||||
| -rw-r--r-- | music.c | 39 | ||||
| -rw-r--r-- | music.h | 5 | 
3 files changed, 21 insertions, 29 deletions
| @@ -20,14 +20,16 @@ static void commands_list(GSocketConnection *connection, const gchar *cmd) {  	GSocket *socket = g_socket_connection_get_socket(connection); -	for(struct directory *d = directory->sub; d; d = d->next) { +	for(GSList *node = directory->sub; node; node = g_slist_next(node)) { +		struct directory *d = node->data;  		gchar *name = g_path_get_basename(d->path);  		g_socket_send(socket, name, strlen(name), NULL, NULL);  		g_socket_send(socket, "\n", 1, NULL, NULL);  		g_free(name);  	} -	for(struct file *f = directory->files; f; f = f->next) { +	for(GSList *node = directory->files; node; node = g_slist_next(node)) { +		struct file *f = node->data;  		g_socket_send(socket, f->name, strlen(f->name), NULL, NULL);  		g_socket_send(socket, "\n", 1, NULL, NULL);  	} @@ -39,26 +39,14 @@ gboolean music_scan(struct directory *directory) {  			struct file *f = g_new0(struct file, 1);  			f->name = g_strdup(entry); -			if(directory->files == NULL) { -				directory->files = f; -			} else { -				struct file *last = directory->files; -				while(last->next) last = last->next; -				last->next = f; -			} +			directory->files = g_slist_prepend(directory->files, f);  			g_debug("added file %s to %s", entry, directory->path);  		} else if(S_ISDIR(st.st_mode)) {  			struct directory *d = g_new0(struct directory, 1);  			d->path = g_build_filename(directory->path, entry, NULL); -			if(directory->sub == NULL) { -				directory->sub = d; -			} else { -				struct directory *last = directory->sub; -				while(last->next) last = last->next; -				last->next = d; -			} +			directory->sub = g_slist_prepend(directory->sub, d);  			g_debug("added subdir %s to %s", entry, directory->path); @@ -82,7 +70,9 @@ static struct directory *music_find_dir_rec(struct directory *root, const gchar  	if(g_strcmp0(root->path, path) == 0)  		return root; -	for(struct directory *d = root->sub; d; d = d->next) { +	for(GSList *node = root->sub; node; node = g_slist_next(node)) { +		struct directory *d = node->data; +		g_debug(d->path);  		if(g_strcmp0(d->path, path) == 0) {  			return d;  		} @@ -110,7 +100,8 @@ struct file *music_find_file(const gchar *path) {  		return NULL;  	} -	for(struct file *f = directory->files; f; f = f->next) { +	for(GSList *node = directory->files; node; node = g_slist_next(node)) { +		struct file *f = node->data;  		if(g_strcmp0(filename, f->name) == 0) {  			return f;  		} @@ -120,23 +111,23 @@ struct file *music_find_file(const gchar *path) {  }  static void music_do_free(struct directory *root) { -	struct directory *node; -  	g_assert(root != NULL); -	for(node = root->sub; node; node = node->next) { -		music_do_free(node); +	for(GSList *node = root->sub; node; node = g_slist_next(node)) { +		struct directory *d = node->data; +		music_do_free(d);  	} -	for(node = root->next; node; node = node->next) { -		music_do_free(node); -	} +	g_slist_free(root->sub); -	for(struct file *f = root->files; f; f = f->next) { +	for(GSList *node = root->files; node; node = g_slist_next(node)) { +		struct file *f = node->data;  		g_free(f->name);  		g_free(f);  	} +	g_slist_free(root->files); +  	g_free(root->path);  	g_free(root);  } @@ -9,13 +9,12 @@  struct file {  	gchar *name;  	gssize size; -	struct file *next;  };  struct directory {  	gchar *path; -	struct directory *sub, *next; -	struct file *files; +	GSList *sub; +	GSList *files;  };  extern struct directory *music_root; | 
