summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Leonard <tal@ecs.soton.ac.uk>2003-08-27 14:40:33 +0000
committerThomas Leonard <tal@ecs.soton.ac.uk>2003-08-27 14:40:33 +0000
commit346b05289f5754f59861f2de06c77986177c450a (patch)
tree36d4b0263c780b41452f16ed4db12457942c7fce
parent5906e40cc98979dca9f6ca72de4eae61ae783e06 (diff)
downloadshared-mime-info-346b05289f5754f59861f2de06c77986177c450a.tar.gz
Fix endianness problem in magic file (reported by Jaap Karssenberg).
-rw-r--r--update-mime-database.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/update-mime-database.c b/update-mime-database.c
index c07070b4..8fca6829 100644
--- a/update-mime-database.c
+++ b/update-mime-database.c
@@ -786,7 +786,7 @@ static void getstr(const char *s, GString *out)
*/
static void parse_int_value(int bytes, const char *in, const char *in_mask,
GString *parsed_value, char **parsed_mask,
- GError **error)
+ gboolean big_endian, GError **error)
{
char *end;
char *out_mask = NULL;
@@ -802,7 +802,7 @@ static void parse_int_value(int bytes, const char *in, const char *in_mask,
for (b = 0; b < bytes; b++)
{
- int shift = (bytes - b - 1) * 8;
+ int shift = (big_endian ? (bytes - b - 1) : b) * 8;
g_string_append_c(parsed_value, (value >> shift) & 0xff);
}
@@ -910,13 +910,13 @@ static void parse_value(const char *type, const char *in, const char *in_mask,
if (strstr(type, "16"))
parse_int_value(2, in, in_mask, parsed_value, parsed_mask,
- error);
+ type[0] == 'b', error);
else if (strstr(type, "32"))
parse_int_value(4, in, in_mask, parsed_value, parsed_mask,
- error);
+ type[0] == 'b', error);
else if (strcmp(type, "byte") == 0)
parse_int_value(1, in, in_mask, parsed_value, parsed_mask,
- error);
+ FALSE, error);
else if (strcmp(type, "string") == 0)
{
getstr(in, parsed_value);