summaryrefslogtreecommitdiffstats
path: root/drivers/firewire/core-device.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2009-12-26 01:43:21 +0100
committerStefan Richter <stefanr@s5r6.in-berlin.de>2009-12-29 19:58:17 +0100
commit3c2c58cb33b3b15a2c4871babeec8fe1456e1db6 (patch)
treec19f59e4de0d9fb84fa5e4a7b3cd4d600d3708cd /drivers/firewire/core-device.c
parent1f8fef7b3388b5a976e80839679b5bae581a1091 (diff)
downloadlinux-3c2c58cb33b3b15a2c4871babeec8fe1456e1db6.tar.gz
linux-3c2c58cb33b3b15a2c4871babeec8fe1456e1db6.tar.bz2
linux-3c2c58cb33b3b15a2c4871babeec8fe1456e1db6.zip
firewire: core: fw_csr_string addendum
Witespace and comment changes, and a different way to say i + 1 < end. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/core-device.c')
-rw-r--r--drivers/firewire/core-device.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index a39e4344cd58..5d5c6a689837 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -69,19 +69,22 @@ static u32 *search_leaf(u32 *directory, int search_key)
if (last_key == search_key &&
key == (CSR_DESCRIPTOR | CSR_LEAF))
return ci.p - 1 + value;
+
last_key = key;
}
+
return NULL;
}
static int textual_leaf_to_string(u32 *block, char *buf, size_t size)
{
- unsigned int quadlets, length;
+ unsigned int quadlets, i;
+ char c;
if (!size || !buf)
return -EINVAL;
- quadlets = min(block[0] >> 16, 256u);
+ quadlets = min(block[0] >> 16, 256U);
if (quadlets < 2)
return -ENODATA;
@@ -91,31 +94,34 @@ static int textual_leaf_to_string(u32 *block, char *buf, size_t size)
block += 3;
quadlets -= 2;
- for (length = 0; length < quadlets * 4 && length + 1 < size; length++) {
- char c = block[length / 4] >> (24 - 8 * (length % 4));
+ for (i = 0; i < quadlets * 4 && i < size - 1; i++) {
+ c = block[i / 4] >> (24 - 8 * (i % 4));
if (c == '\0')
break;
- buf[length] = c;
+ buf[i] = c;
}
- buf[length] = '\0';
- return length;
+ buf[i] = '\0';
+
+ return i;
}
/**
* fw_csr_string - reads a string from the configuration ROM
- * @directory: device or unit directory;
- * fw_device->config_rom+5 or fw_unit->directory
+ * @directory: e.g. root directory or unit directory
* @key: the key of the preceding directory entry
* @buf: where to put the string
* @size: size of @buf, in bytes
*
- * Returns string length (>= 0) or error code (< 0).
+ * The string is taken from a minimal ASCII text descriptor leaf after
+ * the immediate entry with @key. The string is zero-terminated.
+ * Returns strlen(buf) or a negative error code.
*/
int fw_csr_string(u32 *directory, int key, char *buf, size_t size)
{
u32 *leaf = search_leaf(directory, key);
if (!leaf)
return -ENOENT;
+
return textual_leaf_to_string(leaf, buf, size);
}
EXPORT_SYMBOL(fw_csr_string);