Changeset d5070ef in mainline


Ignore:
Timestamp:
2012-06-22T05:32:30Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
da0fef6
Parents:
8b36bf2
Message:

Bithenge: transforms and uint32le_transform

Location:
uspace/app/bithenge
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bithenge/Makefile

    r8b36bf2 rd5070ef  
    3838        print.c \
    3939        test.c \
     40        transform.c \
    4041        tree.c
    4142
  • uspace/app/bithenge/blob.c

    r8b36bf2 rd5070ef  
    297297}
    298298
     299/** Check whether the contents of two blobs are equal.
     300 * @memberof bithenge_blob_t
     301 * @param a, b Blobs to compare.
     302 * @return Whether the blobs are equal. If an error occurs, returns false.
     303 */
     304bool bithenge_blob_equal(bithenge_blob_t *a, bithenge_blob_t *b)
     305{
     306        assert(a);
     307        assert(a->base.blob_ops);
     308        assert(b);
     309        assert(b->base.blob_ops);
     310        int rc;
     311        char buffer_a[4096], buffer_b[4096];
     312        aoff64_t offset = 0, size_a = sizeof(buffer_a), size_b = sizeof(buffer_b);
     313        do {
     314                rc = bithenge_blob_read(a, offset, buffer_a, &size_a);
     315                if (rc != EOK)
     316                        return false;
     317                rc = bithenge_blob_read(b, offset, buffer_b, &size_b);
     318                if (rc != EOK)
     319                        return false;
     320                if (size_a != size_b || bcmp(buffer_a, buffer_b, size_a))
     321                        return false;
     322                offset += size_a;
     323        } while (size_a == sizeof(buffer_a));
     324        return true;
     325}
     326
    299327/** @}
    300328 */
  • uspace/app/bithenge/blob.h

    r8b36bf2 rd5070ef  
    182182    size_t len, bool needs_free);
    183183
     184bool bithenge_blob_equal(bithenge_blob_t *a, bithenge_blob_t *b);
     185
    184186#endif
    185187
  • uspace/app/bithenge/tree.c

    r8b36bf2 rd5070ef  
    3737#include <errno.h>
    3838#include <stdlib.h>
     39#include <str.h>
    3940#include "blob.h"
    4041#include "tree.h"
     
    207208}
    208209
     210/** Check whether the contents of two nodes are equal. Does not yet work for
     211 * internal nodes.
     212 * @memberof bithenge_node_t
     213 * @param a, b Nodes to compare.
     214 * @return Whether the nodes are equal. If an error occurs, returns false.
     215 * @todo Add support for internal nodes.
     216 */
     217bool bithenge_node_equal(bithenge_node_t *a, bithenge_node_t *b)
     218{
     219        if (a->type != b->type)
     220                return false;
     221        switch (a->type) {
     222        case BITHENGE_NODE_INTERNAL:
     223                return false;
     224        case BITHENGE_NODE_BOOLEAN:
     225                return a->boolean_value == b->boolean_value;
     226        case BITHENGE_NODE_INTEGER:
     227                return a->integer_value == b->integer_value;
     228        case BITHENGE_NODE_STRING:
     229                return !str_cmp(a->string_value.ptr, b->string_value.ptr);
     230        case BITHENGE_NODE_BLOB:
     231                return bithenge_blob_equal(bithenge_node_as_blob(a),
     232                    bithenge_node_as_blob(b));
     233        }
     234        return false;
     235}
     236
    209237/** @}
    210238 */
  • uspace/app/bithenge/tree.h

    r8b36bf2 rd5070ef  
    153153int bithenge_new_string_node(bithenge_node_t **, const char *, bool);
    154154int bithenge_node_destroy(bithenge_node_t *);
     155bool bithenge_node_equal(bithenge_node_t *, bithenge_node_t *);
    155156
    156157#endif
Note: See TracChangeset for help on using the changeset viewer.