Lines Matching refs:us
1578 static int consume_be32(struct unsave_state *us, unsigned int *val) in consume_be32() argument
1582 if (us->l < sizeof(d)) { in consume_be32()
1585 memcpy(&d, us->d, sizeof(d)); in consume_be32()
1587 us->d += sizeof(d); in consume_be32()
1588 us->l -= sizeof(d); in consume_be32()
1592 static int consume_string(struct unsave_state *us, char **str, size_t *len) in consume_string() argument
1596 if (!us->l) { in consume_string()
1600 l = strnlen((void *)us->d, us->l); in consume_string()
1601 if (l == us->l) { in consume_string()
1606 *str = (void *)us->d; in consume_string()
1612 us->d += l + 1; in consume_string()
1613 us->l -= l + 1; in consume_string()
1645 static XsNode *lookup_tx_node(struct unsave_state *us, unsigned int tx_id) in lookup_tx_node() argument
1648 if (tx_id == us->s->root_tx) { in lookup_tx_node()
1649 return lookup_node(us->s->root, us->path + 1); in lookup_tx_node()
1652 t = g_hash_table_lookup(us->s->transactions, GINT_TO_POINTER(tx_id)); in lookup_tx_node()
1657 return lookup_node(t->root, us->path + 1); in lookup_tx_node()
1672 static int consume_node(struct unsave_state *us, XsNode **nodep, in consume_node() argument
1679 if (us->l < 1) { in consume_node()
1682 flags = us->d[0]; in consume_node()
1683 us->d++; in consume_node()
1684 us->l--; in consume_node()
1689 ret = consume_be32(us, &tx); in consume_node()
1694 n = lookup_tx_node(us, tx); in consume_node()
1716 ret = consume_be32(us, &datalen); in consume_node()
1722 if (datalen > us->l) { in consume_node()
1728 g_byte_array_append(node_data, us->d, datalen); in consume_node()
1729 us->d += datalen; in consume_node()
1730 us->l -= datalen; in consume_node()
1733 if (us->root_walk) { in consume_node()
1741 ret = consume_string(us, &perm, &permlen); in consume_node()
1761 ret = consume_string(us, &childname, &childlen); in consume_node()
1771 pathend = us->path + strlen(us->path); in consume_node()
1772 strncat(us->path, "/", sizeof(us->path) - 1); in consume_node()
1773 strncat(us->path, childname, sizeof(us->path) - 1); in consume_node()
1775 ret = consume_node(us, &child, nr_nodes); in consume_node()
1789 if (us->root_walk && !n->children) { in consume_node()
1802 static int consume_tree(struct unsave_state *us, XsTransaction *t) in consume_tree() argument
1806 ret = consume_be32(us, &t->tx_id); in consume_tree()
1811 if (t->tx_id > us->s->last_tx) { in consume_tree()
1815 us->path[0] = '\0'; in consume_tree()
1817 return consume_node(us, &t->root, &t->nr_nodes); in consume_tree()
1824 struct unsave_state us; in xs_impl_deserialize() local
1828 us.s = s; in xs_impl_deserialize()
1829 us.bytes = bytes; in xs_impl_deserialize()
1830 us.d = bytes->data; in xs_impl_deserialize()
1831 us.l = bytes->len; in xs_impl_deserialize()
1840 ret = consume_be32(&us, &s->last_tx); in xs_impl_deserialize()
1853 us.root_walk = true; in xs_impl_deserialize()
1854 ret = consume_tree(&us, &base_t); in xs_impl_deserialize()
1858 us.root_walk = false; in xs_impl_deserialize()
1879 ret = consume_be32(&us, &base_tx); in xs_impl_deserialize()
1890 ret = consume_be32(&us, &t->dom_id); in xs_impl_deserialize()
1892 ret = consume_tree(&us, t); in xs_impl_deserialize()
1909 ret = consume_string(&us, &path, &pathlen); in xs_impl_deserialize()
1917 ret = consume_string(&us, &token, &toklen); in xs_impl_deserialize()
1932 if (us.l) { in xs_impl_deserialize()