[PATCH v2 06/23] libusbg: Refresh function attributes while each get.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Function attributes may be changed by kernel or other
user so they should not be cached in library structures.

Signed-off-by: Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx>
---
 src/usbg.c |   31 +++++++++++--------------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/src/usbg.c b/src/usbg.c
index 63b8a32..d7284bb 100644
--- a/src/usbg.c
+++ b/src/usbg.c
@@ -74,7 +74,6 @@ struct usbg_function
 	char path[USBG_MAX_PATH_LENGTH];
 
 	usbg_function_type type;
-	usbg_function_attrs attr;
 };
 
 struct usbg_binding
@@ -267,7 +266,8 @@ static inline void usbg_write_string(char *path, char *name, char *file, char *b
 	usbg_write_buf(path, name, file, buf);
 }
 
-static void usbg_parse_function_attrs(usbg_function *f)
+static void usbg_parse_function_attrs(usbg_function *f,
+		usbg_function_attrs *f_attrs)
 {
 	struct ether_addr *addr;
 	char str_addr[40];
@@ -276,7 +276,7 @@ static void usbg_parse_function_attrs(usbg_function *f)
 	case F_SERIAL:
 	case F_ACM:
 	case F_OBEX:
-		f->attr.serial.port_num = usbg_read_dec(f->path, f->name, "port_num");
+		f_attrs->serial.port_num = usbg_read_dec(f->path, f->name, "port_num");
 		break;
 	case F_ECM:
 	case F_SUBSET:
@@ -286,18 +286,18 @@ static void usbg_parse_function_attrs(usbg_function *f)
 		usbg_read_string(f->path, f->name, "dev_addr", str_addr);
 		addr = ether_aton(str_addr);
 		if (addr)
-			f->attr.net.dev_addr = *addr;
+			f_attrs->net.dev_addr = *addr;
 
 		usbg_read_string(f->path, f->name, "host_addr", str_addr);
 		addr = ether_aton(str_addr);
 		if(addr)
-			f->attr.net.host_addr = *addr;
+			f_attrs->net.host_addr = *addr;
 
-		usbg_read_string(f->path, f->name, "ifname", f->attr.net.ifname);
-		f->attr.net.qmult = usbg_read_dec(f->path, f->name, "qmult");
+		usbg_read_string(f->path, f->name, "ifname", f_attrs->net.ifname);
+		f_attrs->net.qmult = usbg_read_dec(f->path, f->name, "qmult");
 		break;
 	case F_PHONET:
-		usbg_read_string(f->path, f->name, "ifname", f->attr.phonet.ifname);
+		usbg_read_string(f->path, f->name, "ifname", f_attrs->phonet.ifname);
 		break;
 	default:
 		ERROR("Unsupported function type\n");
@@ -322,7 +322,6 @@ static int usbg_parse_functions(char *path, usbg_gadget *g)
 		strcpy(f->name, dent[i]->d_name);
 		strcpy(f->path, fpath);
 		f->type = usbg_lookup_function_type(strtok(dent[i]->d_name, "."));
-		usbg_parse_function_attrs(f);
 		TAILQ_INSERT_TAIL(&g->functions, f, fnode);
 		free(dent[i]);
 	}
@@ -905,8 +904,6 @@ usbg_function *usbg_create_function(usbg_gadget *g, usbg_function_type type,
 
 	if (f_attrs)
 		usbg_set_function_attrs(f, f_attrs);
-	else
-		usbg_parse_function_attrs(f);
 
 	INSERT_TAILQ_STRING_ORDER(&g->functions, fhead, name, f, fnode);
 
@@ -1143,10 +1140,11 @@ usbg_function_type usbg_get_function_type(usbg_function *f)
 	return f->type;
 }
 
-usbg_function_attrs *usbg_get_function_attrs(usbg_function *f, usbg_function_attrs *f_attrs)
+usbg_function_attrs *usbg_get_function_attrs(usbg_function *f,
+		usbg_function_attrs *f_attrs)
 {
 	if (f && f_attrs)
-		*f_attrs = f->attr;
+		usbg_parse_function_attrs(f, f_attrs);
 	else
 		f_attrs = NULL;
 
@@ -1160,8 +1158,6 @@ void usbg_set_function_attrs(usbg_function *f, usbg_function_attrs *f_attrs)
 	if (!f || !f_attrs)
 		return;
 
-	f->attr = *f_attrs;
-
 	switch (f->type) {
 	case F_SERIAL:
 	case F_ACM:
@@ -1195,8 +1191,6 @@ void usbg_set_net_dev_addr(usbg_function *f, struct ether_addr *dev_addr)
 {
 	char *str_addr;
 
-	f->attr.net.dev_addr = *dev_addr;
-
 	str_addr = ether_ntoa(dev_addr);
 	usbg_write_string(f->path, f->name, "dev_addr", str_addr);
 }
@@ -1205,15 +1199,12 @@ void usbg_set_net_host_addr(usbg_function *f, struct ether_addr *host_addr)
 {
 	char *str_addr;
 
-	f->attr.net.host_addr = *host_addr;
-
 	str_addr = ether_ntoa(host_addr);
 	usbg_write_string(f->path, f->name, "host_addr", str_addr);
 }
 
 void usbg_set_net_qmult(usbg_function *f, int qmult)
 {
-	f->attr.net.qmult = qmult;
 	usbg_write_dec(f->path, f->name, "qmult", qmult);
 }
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux