diff options
Diffstat (limited to 'src/logic')
-rw-r--r-- | src/logic/tpax_queue_vector.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/logic/tpax_queue_vector.c b/src/logic/tpax_queue_vector.c index 092f39f..82930b1 100644 --- a/src/logic/tpax_queue_vector.c +++ b/src/logic/tpax_queue_vector.c @@ -12,6 +12,41 @@ #include "tpax_errinfo_impl.h" #include "tpax_visibility_impl.h" +#define TPAX_MAX_DEPTH 512 + +tpax_hidden const char * tpax_queue_item_full_path( + const struct tpax_driver_ctx * dctx, + const struct tpax_dirent * cdent) +{ + char * ch; + char * pathbuf; + const struct tpax_dirent * pparent; + const struct tpax_dirent ** pdirent; + const struct tpax_dirent * dirstck[TPAX_MAX_DEPTH]; + + if (cdent->depth >= TPAX_MAX_DEPTH) + return 0; + + ch = pathbuf = (tpax_get_driver_ictx(dctx))->dirbuff; + + for (pparent=cdent,pdirent=dirstck; pparent; pparent=pparent->parent) + *pdirent++ = pparent; + + *pdirent-- = 0; + + if (pdirent[0]->prefix) + ch += sprintf(ch,"%s",pdirent[0]->prefix); + + for (; pdirent > dirstck; ) { + ch += sprintf(ch,"%s/",pdirent[0]->dirent.d_name); + pdirent--; + } + + sprintf(ch,"%s",pdirent[0]->dirent.d_name); + + return pathbuf; +} + tpax_hidden int tpax_update_queue_vector(const struct tpax_driver_ctx * dctx) { uintptr_t addr; |