Implemented ipfs_pin_has_child
This commit is contained in:
parent
4c330e29be
commit
6448a35a72
2 changed files with 39 additions and 0 deletions
|
@ -40,4 +40,8 @@
|
|||
// Return array index or -1 if fail.
|
||||
PinMode ipfs_string_to_pin_mode (char *str);
|
||||
int ipfs_pin_is_pinned (struct Pinned *p);
|
||||
// Find out if the child is in the hash.
|
||||
int ipfs_pin_has_child (struct FSRepo *ds,
|
||||
unsigned char *hash, size_t hash_size,
|
||||
unsigned char *child, size_t child_size);
|
||||
#endif // IPFS_PIN_H
|
||||
|
|
35
pin/pin.c
35
pin/pin.c
|
@ -1,11 +1,14 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ipfs/repo/fsrepo/fs_repo.h"
|
||||
|
||||
#define IPFS_PIN_C
|
||||
#include "ipfs/pin/pin.h"
|
||||
|
||||
#include "ipfs/cid/cid.h"
|
||||
#include "ipfs/datastore/key.h"
|
||||
#include "ipfs/merkledag/merkledag.h"
|
||||
#include "ipfs/util/errs.h"
|
||||
|
||||
// package pin implements structures and methods to keep track of
|
||||
|
@ -110,3 +113,35 @@ char *ipfs_pin_pinned_msg (struct Pinned *p)
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Find out if the child is in the hash.
|
||||
int ipfs_pin_has_child (struct FSRepo *ds,
|
||||
unsigned char *hash, size_t hash_size,
|
||||
unsigned char *child, size_t child_size)
|
||||
{
|
||||
struct Node *node;
|
||||
struct NodeLink *node_link;
|
||||
|
||||
if (ipfs_merkledag_get (hash, hash_size, &node, ds)) {
|
||||
if (node) {
|
||||
if ((node->hash_size == child_size) &&
|
||||
(memcmp (node->hash, child, child_size) == 0)) {
|
||||
return 1;
|
||||
}
|
||||
// browse the node links.
|
||||
for (node_link = node->head_link ; node_link ; node_link = node_link->next) {
|
||||
if ((node_link->hash_size == child_size) &&
|
||||
(memcmp (node_link->hash, child, child_size) != 0) &&
|
||||
ipfs_pin_has_child (ds, node_link->hash, node_link->hash_size,
|
||||
child, child_size)) {
|
||||
return 1;
|
||||
}
|
||||
if ((node_link->hash_size == child_size) &&
|
||||
(memcmp (node_link->hash, child, child_size) == 0)) {
|
||||
return 1; // child is a child of the hash node.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue