mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Move device_info handling into a new 'device.c' file
The legacy nickname wrappers (that use the device_info structure) are left in gtk-gui.c. We can slowly start moving away from them, we don't want to start exporting that thing as some kind of generic interface. This isn't a pure code movement - because we leave the legacy interfaces alone, there are a few new interfaces in device.c (like "create a new device_info entry") that were embedded into the legacy "create nickname" code, and needed to be abstracted out. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									33c67cc619
								
							
						
					
					
						commit
						ec38d3708d
					
				
					 6 changed files with 135 additions and 115 deletions
				
			
		
							
								
								
									
										11
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
					@ -132,7 +132,7 @@ MSGOBJS=$(addprefix share/locale/,$(MSGLANGS:.po=.UTF-8/LC_MESSAGES/subsurface.m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS =	main.o dive.o time.o profile.o info.o equipment.o divelist.o deco.o planner.o \
 | 
					OBJS =	main.o dive.o time.o profile.o info.o equipment.o divelist.o deco.o planner.o \
 | 
				
			||||||
	parse-xml.o save-xml.o libdivecomputer.o print.o uemis.o uemis-downloader.o \
 | 
						parse-xml.o save-xml.o libdivecomputer.o print.o uemis.o uemis-downloader.o \
 | 
				
			||||||
	gtk-gui.o statistics.o file.o cochran.o $(OSSUPPORT).o $(RESFILE)
 | 
						gtk-gui.o statistics.o file.o cochran.o device.o $(OSSUPPORT).o $(RESFILE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(NAME): $(OBJS) $(MSGOBJS)
 | 
					$(NAME): $(OBJS) $(MSGOBJS)
 | 
				
			||||||
	$(CC) $(LDFLAGS) -o $(NAME) $(OBJS) $(LIBS)
 | 
						$(CC) $(LDFLAGS) -o $(NAME) $(OBJS) $(LIBS)
 | 
				
			||||||
| 
						 | 
					@ -214,7 +214,7 @@ cochran.o: cochran.c dive.h file.h
 | 
				
			||||||
parse-xml.o: parse-xml.c dive.h
 | 
					parse-xml.o: parse-xml.c dive.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) $(XSLT) -c parse-xml.c
 | 
						$(CC) $(CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) $(XSLT) -c parse-xml.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
save-xml.o: save-xml.c dive.h
 | 
					save-xml.o: save-xml.c dive.h device.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) -c save-xml.c
 | 
						$(CC) $(CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) -c save-xml.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dive.o: dive.c dive.h
 | 
					dive.o: dive.c dive.h
 | 
				
			||||||
| 
						 | 
					@ -250,12 +250,12 @@ deco.o: deco.c dive.h
 | 
				
			||||||
planner.o: planner.c dive.h divelist.h display-gtk.h
 | 
					planner.o: planner.c dive.h divelist.h display-gtk.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) -c planner.c
 | 
						$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) -c planner.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libdivecomputer.o: libdivecomputer.c dive.h display.h display-gtk.h libdivecomputer.h
 | 
					libdivecomputer.o: libdivecomputer.c dive.h display.h display-gtk.h libdivecomputer.h device.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) \
 | 
						$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) \
 | 
				
			||||||
			$(LIBDIVECOMPUTERCFLAGS) \
 | 
								$(LIBDIVECOMPUTERCFLAGS) \
 | 
				
			||||||
			-c libdivecomputer.c
 | 
								-c libdivecomputer.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gtk-gui.o: gtk-gui.c dive.h display.h divelist.h display-gtk.h libdivecomputer.h Makefile
 | 
					gtk-gui.o: gtk-gui.c dive.h display.h divelist.h display-gtk.h libdivecomputer.h device.h Makefile
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(GCONF2CFLAGS) $(XML2CFLAGS) \
 | 
						$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(GCONF2CFLAGS) $(XML2CFLAGS) \
 | 
				
			||||||
			$(LIBDIVECOMPUTERCFLAGS) \
 | 
								$(LIBDIVECOMPUTERCFLAGS) \
 | 
				
			||||||
			-DVERSION_STRING='"v$(VERSION)"' \
 | 
								-DVERSION_STRING='"v$(VERSION)"' \
 | 
				
			||||||
| 
						 | 
					@ -267,6 +267,9 @@ uemis.o: uemis.c dive.h uemis.h
 | 
				
			||||||
uemis-downloader.o: uemis-downloader.c dive.h uemis.h
 | 
					uemis-downloader.o: uemis-downloader.c dive.h uemis.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) -c uemis-downloader.c
 | 
						$(CC) $(CFLAGS) $(GTK2CFLAGS) $(GLIB2CFLAGS) $(XML2CFLAGS) -c uemis-downloader.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					device.o: device.c device.h dive.h
 | 
				
			||||||
 | 
						$(CC) $(CFLAGS) $(GLIB2CFLAGS) -c device.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(OSSUPPORT).o: $(OSSUPPORT).c display-gtk.h
 | 
					$(OSSUPPORT).o: $(OSSUPPORT).c display-gtk.h
 | 
				
			||||||
	$(CC) $(CFLAGS) $(OSSUPPORT_CFLAGS) -c $(OSSUPPORT).c
 | 
						$(CC) $(CFLAGS) $(OSSUPPORT_CFLAGS) -c $(OSSUPPORT).c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										94
									
								
								device.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								device.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,94 @@
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include "dive.h"
 | 
				
			||||||
 | 
					#include "device.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct device_info *device_info_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int match_device_info(struct device_info *entry, const char *model, uint32_t deviceid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return !strcmp(entry->model, model) && entry->deviceid == deviceid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* just find the entry for this divecomputer */
 | 
				
			||||||
 | 
					struct device_info *get_device_info(const char *model, uint32_t deviceid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_info *known = device_info_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* a 0 deviceid doesn't get a nickname - those come from development
 | 
				
			||||||
 | 
						 * versions of Subsurface that didn't store the deviceid in the divecomputer entries */
 | 
				
			||||||
 | 
						if (!deviceid || !model)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						while (known) {
 | 
				
			||||||
 | 
							if (match_device_info(known, model, deviceid))
 | 
				
			||||||
 | 
								return known;
 | 
				
			||||||
 | 
							known = known->next;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Get an existing device info model or create a new one if valid */
 | 
				
			||||||
 | 
					struct device_info *create_device_info(const char *model, uint32_t deviceid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_info *entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!deviceid || !model || !*model)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						entry = get_device_info(model, deviceid);
 | 
				
			||||||
 | 
						if (entry)
 | 
				
			||||||
 | 
							return entry;
 | 
				
			||||||
 | 
						entry = calloc(1, sizeof(*entry));
 | 
				
			||||||
 | 
						if (entry) {
 | 
				
			||||||
 | 
							entry->model = strdup(model);
 | 
				
			||||||
 | 
							entry->deviceid = deviceid;
 | 
				
			||||||
 | 
							entry->next = device_info_list;
 | 
				
			||||||
 | 
							device_info_list = entry;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return entry;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void clear_device_saved_status(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_info *nn_entry = device_info_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (nn_entry) {
 | 
				
			||||||
 | 
							nn_entry->saved = FALSE;
 | 
				
			||||||
 | 
							nn_entry = nn_entry->next;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* do we have a DIFFERENT divecomputer of the same model? */
 | 
				
			||||||
 | 
					struct device_info *get_different_device_info(const char *model, uint32_t deviceid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_info *known = device_info_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* a 0 deviceid matches any DC of the same model - those come from development
 | 
				
			||||||
 | 
						 * versions of Subsurface that didn't store the deviceid in the divecomputer entries */
 | 
				
			||||||
 | 
						if (!deviceid)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						if (!model)
 | 
				
			||||||
 | 
							model = "";
 | 
				
			||||||
 | 
						while (known) {
 | 
				
			||||||
 | 
							if (known->model && !strcmp(known->model, model) &&
 | 
				
			||||||
 | 
							    known->deviceid != deviceid)
 | 
				
			||||||
 | 
								return known;
 | 
				
			||||||
 | 
							known = known->next;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct device_info *remove_device_info(const char *model, uint32_t deviceid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_info *entry, **p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!deviceid || !model || !*model)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						p = &device_info_list;
 | 
				
			||||||
 | 
						while ((entry = *p) != NULL) {
 | 
				
			||||||
 | 
							if (match_device_info(entry, model, deviceid)) {
 | 
				
			||||||
 | 
								*p = entry->next;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							p = &entry->next;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return entry;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								device.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								device.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					#ifndef DEVICE_INFO_H
 | 
				
			||||||
 | 
					#define DEVICE_INFO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct device_info {
 | 
				
			||||||
 | 
						const char *model;
 | 
				
			||||||
 | 
						uint32_t deviceid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const char *nickname;
 | 
				
			||||||
 | 
						struct device_info *next;
 | 
				
			||||||
 | 
						gboolean saved;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern struct device_info *get_device_info(const char *model, uint32_t deviceid);
 | 
				
			||||||
 | 
					extern struct device_info *get_different_device_info(const char *model, uint32_t deviceid);
 | 
				
			||||||
 | 
					extern struct device_info *create_device_info(const char *model, uint32_t deviceid);
 | 
				
			||||||
 | 
					extern struct device_info *remove_device_info(const char *model, uint32_t deviceid);
 | 
				
			||||||
 | 
					extern void clear_device_saved_status(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										1
									
								
								dive.h
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								dive.h
									
										
									
									
									
								
							| 
						 | 
					@ -544,7 +544,6 @@ extern const char *get_dc_nickname(const char *model, uint32_t deviceid);
 | 
				
			||||||
extern void remember_dc(const char *model, uint32_t deviceid, const char *nickname, gboolean change_conf);
 | 
					extern void remember_dc(const char *model, uint32_t deviceid, const char *nickname, gboolean change_conf);
 | 
				
			||||||
extern gboolean dc_was_saved(struct divecomputer *dc);
 | 
					extern gboolean dc_was_saved(struct divecomputer *dc);
 | 
				
			||||||
extern void mark_dc_saved(struct divecomputer *dc);
 | 
					extern void mark_dc_saved(struct divecomputer *dc);
 | 
				
			||||||
extern void clear_dc_saved_status(void);
 | 
					 | 
				
			||||||
extern void set_autogroup(gboolean value);
 | 
					extern void set_autogroup(gboolean value);
 | 
				
			||||||
extern int total_weight(struct dive *);
 | 
					extern int total_weight(struct dive *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										122
									
								
								gtk-gui.c
									
										
									
									
									
								
							
							
						
						
									
										122
									
								
								gtk-gui.c
									
										
									
									
									
								
							| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
#include "display.h"
 | 
					#include "display.h"
 | 
				
			||||||
#include "display-gtk.h"
 | 
					#include "display-gtk.h"
 | 
				
			||||||
#include "uemis.h"
 | 
					#include "uemis.h"
 | 
				
			||||||
 | 
					#include "device.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "libdivecomputer.h"
 | 
					#include "libdivecomputer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,15 +42,6 @@ struct preferences prefs = {
 | 
				
			||||||
	FALSE, FALSE, FALSE, 0.30, 0.75
 | 
						FALSE, FALSE, FALSE, 0.30, 0.75
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct device_info {
 | 
					 | 
				
			||||||
	const char *model;
 | 
					 | 
				
			||||||
	uint32_t deviceid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *nickname;
 | 
					 | 
				
			||||||
	struct device_info *next;
 | 
					 | 
				
			||||||
	gboolean saved;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
static struct device_info *device_info_list;
 | 
					 | 
				
			||||||
char *nicknamestring;
 | 
					char *nicknamestring;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static GtkWidget *dive_profile;
 | 
					static GtkWidget *dive_profile;
 | 
				
			||||||
| 
						 | 
					@ -2194,25 +2186,6 @@ void set_filename(const char *filename, gboolean force)
 | 
				
			||||||
		existing_filename = NULL;
 | 
							existing_filename = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* just find the entry for this divecomputer */
 | 
					 | 
				
			||||||
static struct device_info *get_device_info(const char *model, int deviceid)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct device_info *known = device_info_list;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* a 0 deviceid doesn't get a nickname - those come from development
 | 
					 | 
				
			||||||
	 * versions of Subsurface that didn't store the deviceid in the divecomputer entries */
 | 
					 | 
				
			||||||
	if (!deviceid)
 | 
					 | 
				
			||||||
		return NULL;
 | 
					 | 
				
			||||||
	if (!model)
 | 
					 | 
				
			||||||
		model = "";
 | 
					 | 
				
			||||||
	while (known) {
 | 
					 | 
				
			||||||
		if (!strcmp(known->model, model) && known->deviceid == deviceid)
 | 
					 | 
				
			||||||
			return known;
 | 
					 | 
				
			||||||
		known = known->next;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *get_dc_nickname(const char *model, uint32_t deviceid)
 | 
					const char *get_dc_nickname(const char *model, uint32_t deviceid)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device_info *known = get_device_info(model, deviceid);
 | 
						struct device_info *known = get_device_info(model, deviceid);
 | 
				
			||||||
| 
						 | 
					@ -2238,36 +2211,6 @@ void mark_dc_saved(struct divecomputer *dc)
 | 
				
			||||||
		nn_entry->saved = TRUE;
 | 
							nn_entry->saved = TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void clear_dc_saved_status()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct device_info *nn_entry = device_info_list;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while (nn_entry) {
 | 
					 | 
				
			||||||
		nn_entry->saved = FALSE;
 | 
					 | 
				
			||||||
		nn_entry = nn_entry->next;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* do we have a DIFFERENT divecomputer of the same model? */
 | 
					 | 
				
			||||||
static struct device_info *get_different_dc_nicknameentry(const char *model, int deviceid)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct device_info *known = device_info_list;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* a 0 deviceid matches any DC of the same model - those come from development
 | 
					 | 
				
			||||||
	 * versions of Subsurface that didn't store the deviceid in the divecomputer entries */
 | 
					 | 
				
			||||||
	if (!deviceid)
 | 
					 | 
				
			||||||
		return NULL;
 | 
					 | 
				
			||||||
	if (!model)
 | 
					 | 
				
			||||||
		model = "";
 | 
					 | 
				
			||||||
	while (known) {
 | 
					 | 
				
			||||||
		if (known->model && !strcmp(known->model, model) &&
 | 
					 | 
				
			||||||
		    known->deviceid != deviceid)
 | 
					 | 
				
			||||||
			return known;
 | 
					 | 
				
			||||||
		known = known->next;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* no curly braces or commas, please */
 | 
					/* no curly braces or commas, please */
 | 
				
			||||||
static char *cleanedup_nickname(const char *nickname, int len)
 | 
					static char *cleanedup_nickname(const char *nickname, int len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -2332,21 +2275,13 @@ bail:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void remove_dc(const char *model, uint32_t deviceid, gboolean change_conf)
 | 
					void remove_dc(const char *model, uint32_t deviceid, gboolean change_conf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device_info *nn_entry, **prevp = &device_info_list;
 | 
					 | 
				
			||||||
	char pattern[160];
 | 
						char pattern[160];
 | 
				
			||||||
	char *nnstring, *brace;
 | 
						char *nnstring, *brace;
 | 
				
			||||||
 | 
						struct device_info *entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!deviceid || !model || !*model)
 | 
						entry = remove_device_info(model, deviceid);
 | 
				
			||||||
 | 
						if (!entry)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	nn_entry = get_device_info(model, deviceid);
 | 
					 | 
				
			||||||
	if (!nn_entry)
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	while (prevp && *prevp != nn_entry)
 | 
					 | 
				
			||||||
		prevp = &(*prevp)->next;
 | 
					 | 
				
			||||||
	if (!prevp)
 | 
					 | 
				
			||||||
		/* that should be impossible */
 | 
					 | 
				
			||||||
		goto bail;
 | 
					 | 
				
			||||||
	(*prevp) = nn_entry->next;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* now remove it from the config string */
 | 
						/* now remove it from the config string */
 | 
				
			||||||
	snprintf(pattern, sizeof(pattern), "{%08x,%s", deviceid, model);
 | 
						snprintf(pattern, sizeof(pattern), "{%08x,%s", deviceid, model);
 | 
				
			||||||
| 
						 | 
					@ -2362,40 +2297,24 @@ void remove_dc(const char *model, uint32_t deviceid, gboolean change_conf)
 | 
				
			||||||
	if (change_conf)
 | 
						if (change_conf)
 | 
				
			||||||
		subsurface_set_conf("dc_nicknames", PREF_STRING, nicknamestring);
 | 
							subsurface_set_conf("dc_nicknames", PREF_STRING, nicknamestring);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(NICKNAME_DEBUG)
 | 
					 | 
				
			||||||
	struct device_info *nn_entry = device_info_list;
 | 
					 | 
				
			||||||
	fprintf(debugfile, "nicknames:\n");
 | 
					 | 
				
			||||||
	while (nn_entry) {
 | 
					 | 
				
			||||||
		fprintf(debugfile, "id %8x model %s nickname %s\n", nn_entry->deviceid, nn_entry->model,
 | 
					 | 
				
			||||||
			nn_entry->nickname && *nn_entry->nickname ? nn_entry->nickname : "(none)");
 | 
					 | 
				
			||||||
		nn_entry = nn_entry->next;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	fprintf(debugfile, "----------\n");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bail:
 | 
					bail:
 | 
				
			||||||
	free(nn_entry);
 | 
						free(entry);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void remember_dc(const char *model, uint32_t deviceid, const char *nickname, gboolean change_conf)
 | 
					void remember_dc(const char *model, uint32_t deviceid, const char *nickname, gboolean change_conf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* we don't want to record entries with a deviceid of 0; those are from earlier
 | 
						struct device_info *nn_entry;
 | 
				
			||||||
	 * development versions of Subsurface before we stored the hash in the divecomputer
 | 
					
 | 
				
			||||||
	 * entries... we don't know which actual divecomputer those entries are from */
 | 
						nn_entry = create_device_info(model, deviceid);
 | 
				
			||||||
	if (!deviceid)
 | 
						if (!nn_entry)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	if (!nickname)
 | 
					
 | 
				
			||||||
		nickname = "";
 | 
						/* No existing nickname? */
 | 
				
			||||||
	if (!get_dc_nickname(model, deviceid)) {
 | 
						if (!nn_entry->nickname) {
 | 
				
			||||||
		char buffer[160];
 | 
							char buffer[160];
 | 
				
			||||||
		struct device_info *nn_entry = malloc(sizeof(struct device_info));
 | 
					 | 
				
			||||||
		nn_entry->deviceid = deviceid;
 | 
					 | 
				
			||||||
		nn_entry->model = strdup(model);
 | 
					 | 
				
			||||||
		/* make sure there are no curly braces or commas in the string and that
 | 
							/* make sure there are no curly braces or commas in the string and that
 | 
				
			||||||
		 * it will fit in the buffer */
 | 
							 * it will fit in the buffer */
 | 
				
			||||||
		nn_entry->nickname = cleanedup_nickname(nickname, sizeof(buffer) - 13 - strlen(model));
 | 
							nn_entry->nickname = cleanedup_nickname(nickname, sizeof(buffer) - 13 - strlen(model));
 | 
				
			||||||
		nn_entry->next = device_info_list;
 | 
					 | 
				
			||||||
		device_info_list = nn_entry;
 | 
					 | 
				
			||||||
		if (*nickname != '\0')
 | 
							if (*nickname != '\0')
 | 
				
			||||||
			snprintf(buffer, sizeof(buffer), "{%08x,%s,%s}", deviceid, model, nn_entry->nickname);
 | 
								snprintf(buffer, sizeof(buffer), "{%08x,%s,%s}", deviceid, model, nn_entry->nickname);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
| 
						 | 
					@ -2403,26 +2322,11 @@ void remember_dc(const char *model, uint32_t deviceid, const char *nickname, gbo
 | 
				
			||||||
		nicknamestring = realloc(nicknamestring, strlen(nicknamestring) + strlen(buffer) + 1);
 | 
							nicknamestring = realloc(nicknamestring, strlen(nicknamestring) + strlen(buffer) + 1);
 | 
				
			||||||
		strcat(nicknamestring, buffer);
 | 
							strcat(nicknamestring, buffer);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		/* modify existing entry */
 | 
					 | 
				
			||||||
		struct device_info *nn_entry = get_device_info(model, deviceid);
 | 
					 | 
				
			||||||
		if (!nn_entry->model || !*nn_entry->model)
 | 
					 | 
				
			||||||
			nn_entry->model = model;
 | 
					 | 
				
			||||||
		nn_entry->nickname = cleanedup_nickname(nickname, 80);
 | 
							nn_entry->nickname = cleanedup_nickname(nickname, 80);
 | 
				
			||||||
		replace_nickname_nicknamestring(model, deviceid, nickname);
 | 
							replace_nickname_nicknamestring(model, deviceid, nickname);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (change_conf)
 | 
						if (change_conf)
 | 
				
			||||||
		subsurface_set_conf("dc_nicknames", PREF_STRING, nicknamestring);
 | 
							subsurface_set_conf("dc_nicknames", PREF_STRING, nicknamestring);
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(NICKNAME_DEBUG)
 | 
					 | 
				
			||||||
	struct device_info *nn_entry = device_info_list;
 | 
					 | 
				
			||||||
	fprintf(debugfile, "nicknames:\n");
 | 
					 | 
				
			||||||
	while (nn_entry) {
 | 
					 | 
				
			||||||
		fprintf(debugfile, "id %8x model %s nickname %s\n", nn_entry->deviceid, nn_entry->model,
 | 
					 | 
				
			||||||
			nn_entry->nickname && *nn_entry->nickname ? nn_entry->nickname : "(none)");
 | 
					 | 
				
			||||||
		nn_entry = nn_entry->next;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	fprintf(debugfile, "----------\n");
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void set_dc_nickname(struct dive *dive)
 | 
					void set_dc_nickname(struct dive *dive)
 | 
				
			||||||
| 
						 | 
					@ -2440,7 +2344,7 @@ void set_dc_nickname(struct dive *dive)
 | 
				
			||||||
		fprintf(debugfile, "set_dc_nickname for model %s deviceid %8x\n", dc->model ? : "", dc->deviceid);
 | 
							fprintf(debugfile, "set_dc_nickname for model %s deviceid %8x\n", dc->model ? : "", dc->deviceid);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		if (get_dc_nickname(dc->model, dc->deviceid) == NULL) {
 | 
							if (get_dc_nickname(dc->model, dc->deviceid) == NULL) {
 | 
				
			||||||
			struct device_info *nn_entry = get_different_dc_nicknameentry(dc->model, dc->deviceid);
 | 
								struct device_info *nn_entry = get_different_device_info(dc->model, dc->deviceid);
 | 
				
			||||||
			if (!nn_entry) {
 | 
								if (!nn_entry) {
 | 
				
			||||||
				/* just remember the dive computer without setting a nickname */
 | 
									/* just remember the dive computer without setting a nickname */
 | 
				
			||||||
				if (dc->model)
 | 
									if (dc->model)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "dive.h"
 | 
					#include "dive.h"
 | 
				
			||||||
 | 
					#include "device.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void show_milli(FILE *f, const char *pre, int value, const char *unit, const char *post)
 | 
					static void show_milli(FILE *f, const char *pre, int value, const char *unit, const char *post)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -524,7 +525,7 @@ void save_dives(const char *filename)
 | 
				
			||||||
	fprintf(f, "<divelog program='subsurface' version='%d'>\n<settings>\n", VERSION);
 | 
						fprintf(f, "<divelog program='subsurface' version='%d'>\n<settings>\n", VERSION);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* save the dive computer nicknames, if any */
 | 
						/* save the dive computer nicknames, if any */
 | 
				
			||||||
	clear_dc_saved_status();
 | 
						clear_device_saved_status();
 | 
				
			||||||
	for_each_dive(i, dive) {
 | 
						for_each_dive(i, dive) {
 | 
				
			||||||
		struct divecomputer *dc = &dive->dc;
 | 
							struct divecomputer *dc = &dive->dc;
 | 
				
			||||||
		while (dc) {
 | 
							while (dc) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue