para_printf(&aca->pbout, "cannot list %s\n", name);
return ret;
}
- id = *(uint32_t *)obj.data;
+ id = read_u32(obj.data);
para_printf(&aca->pbout, "%u\t%s\n", id, name);
return 1;
}
struct osl_object objs[NUM_BLOB_COLUMNS];
char *name = aca->query.data;
size_t name_len = strlen(name) + 1;
- uint32_t id;
+ uint32_t id = (uint32_t)-1; /* STFU, gcc */
+ char id_buf[sizeof(id)];
unsigned num_rows;
int ret;
if (ret < 0)
goto out;
if (!num_rows) { /* this is the first entry ever added */
- /* insert dummy row containing the id */
- id = 2; /* this entry will be entry #1, so 2 is the next */
- objs[BLOBCOL_ID].data = &id;
- objs[BLOBCOL_ID].size = sizeof(id);
+ /*
+ * Insert dummy row containing the next free ID. Since we are
+ * about to insert the first blob with ID 1, the next free ID
+ * will be 2.
+ */
+ id = 2U;
+ write_u32(id_buf, id);
+ objs[BLOBCOL_ID].data = id_buf;
+ objs[BLOBCOL_ID].size = sizeof(id_buf);
objs[BLOBCOL_NAME].data = "";
objs[BLOBCOL_NAME].size = 1;
objs[BLOBCOL_DEF].data = "";
ret = osl(osl_get_object(table, row, BLOBCOL_ID, &obj));
if (ret < 0)
goto out;
- id = *(uint32_t *)obj.data;
+ id = read_u32(obj.data);
obj.data = name + name_len;
obj.size = aca->query.size - name_len;
ret = osl(osl_update_object(table, row, BLOBCOL_DEF, &obj));
ret = osl(osl_get_object(table, row, BLOBCOL_ID, &obj));
if (ret < 0)
goto out;
- id = *(uint32_t *)obj.data + 1;
- obj.data = &id;
+ id = read_u32(obj.data) + 1;
+ write_u32(id_buf, id);
+ obj.data = &id_buf;
ret = osl(osl_update_object(table, row, BLOBCOL_ID, &obj));
if (ret < 0)
goto out;
}
id--;
- objs[BLOBCOL_ID].data = &id;
- objs[BLOBCOL_ID].size = sizeof(id);
+ write_u32(id_buf, id);
+ objs[BLOBCOL_ID].data = &id_buf;
+ objs[BLOBCOL_ID].size = sizeof(id_buf);
objs[BLOBCOL_NAME].data = name;
objs[BLOBCOL_NAME].size = name_len;
objs[BLOBCOL_DEF].data = name + name_len;