diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ipcpd/unicast/dt.c | 14 | ||||
-rw-r--r-- | src/ipcpd/unicast/fa.c | 12 | ||||
-rw-r--r-- | src/ipcpd/unicast/pol/link_state.c | 12 | ||||
-rw-r--r-- | src/lib/rib.c | 19 |
4 files changed, 40 insertions, 17 deletions
diff --git a/src/ipcpd/unicast/dt.c b/src/ipcpd/unicast/dt.c index 9f15e2da..0f504daa 100644 --- a/src/ipcpd/unicast/dt.c +++ b/src/ipcpd/unicast/dt.c @@ -185,13 +185,17 @@ static int dt_rib_read(const char * path, int i; char str[QOS_BLOCK_LEN + 1]; char addrstr[20]; + char * entry; char tmstr[20]; size_t rxqlen = 0; size_t txqlen = 0; struct tm * tm; /* NOTE: we may need stronger checks. */ - fd = atoi(path); + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + + fd = atoi(entry); if (len < RIB_FILE_STRLEN) return 0; @@ -333,9 +337,13 @@ static int dt_rib_getattr(const char * path, struct rib_attr * attr) { #ifdef IPCP_FLOW_STATS - int fd; + int fd; + char * entry; + + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); - fd = atoi(path); + fd = atoi(entry); pthread_mutex_lock(&dt.stat[fd].lock); diff --git a/src/ipcpd/unicast/fa.c b/src/ipcpd/unicast/fa.c index de9ca83d..2fa335e2 100644 --- a/src/ipcpd/unicast/fa.c +++ b/src/ipcpd/unicast/fa.c @@ -133,9 +133,13 @@ static int fa_rib_read(const char * path, char r_eidstr[21]; char tmstr[20]; char castr[1024]; + char * entry; struct tm * tm; - fd = atoi(path); + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + + fd = atoi(entry); if (fd < 0 || fd > PROG_MAX_FLOWS) return -1; @@ -253,9 +257,13 @@ static int fa_rib_getattr(const char * path, { #ifdef IPCP_FLOW_STATS int fd; + char * entry; struct fa_flow * flow; - fd = atoi(path); + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + + fd = atoi(entry); flow = &fa.flows[fd]; diff --git a/src/ipcpd/unicast/pol/link_state.c b/src/ipcpd/unicast/pol/link_state.c index 882bb8ac..08d39372 100644 --- a/src/ipcpd/unicast/pol/link_state.c +++ b/src/ipcpd/unicast/pol/link_state.c @@ -184,15 +184,19 @@ static int lsdb_rib_getattr(const char * path, { struct adjacency * adj; struct timespec now; + char * entry; assert(path); assert(attr); + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + clock_gettime(CLOCK_REALTIME_COARSE, &now); pthread_rwlock_rdlock(&ls.db_lock); - adj = get_adj(path); + adj = get_adj(entry); if (adj != NULL) { attr->mtime = adj->stamp; attr->size = LS_ENTRY_SIZE; @@ -211,16 +215,20 @@ static int lsdb_rib_read(const char * path, size_t len) { struct adjacency * a; + char * entry; int size; assert(path); + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + pthread_rwlock_rdlock(&ls.db_lock); if (ls.db_len + ls.nbs_len == 0) goto fail; - a = get_adj(path); + a = get_adj(entry); if (a == NULL) goto fail; diff --git a/src/lib/rib.c b/src/lib/rib.c index b5222d6d..dfac69d7 100644 --- a/src/lib/rib.c +++ b/src/lib/rib.c @@ -52,8 +52,6 @@ #define CLOCK_REALTIME_COARSE CLOCK_REALTIME #endif -#define RT "/" - struct reg_comp { struct list_head next; @@ -108,8 +106,7 @@ static int rib_read(const char * path, strcpy(comp, path + 1); - c = strstr(comp, "/"); - + c = strstr(comp, RIB_SEPARATOR); if (c != NULL) *c = '\0'; @@ -121,7 +118,7 @@ static int rib_read(const char * path, list_for_each(p, &rib.reg_comps) { struct reg_comp * r = list_entry(p, struct reg_comp, next); if (strcmp(comp, r->path) == 0) { - int ret = r->ops->read(c + 1, buf, size); + int ret = r->ops->read(path + 1, buf, size); pthread_rwlock_unlock(&rib.lock); return ret; } @@ -148,7 +145,7 @@ static int rib_readdir(const char * path, pthread_rwlock_rdlock(&rib.lock); - if (strcmp(path, RT) == 0) { + if (strcmp(path, RIB_SEPARATOR) == 0) { list_for_each(p, &rib.reg_comps) { struct reg_comp * c; c = list_entry(p, struct reg_comp, next); @@ -194,8 +191,7 @@ static size_t __getattr(const char * path, strcpy(comp, path + 1); - c = strstr(comp, "/"); - + c = strstr(comp, RIB_SEPARATOR); if (c != NULL) *c = '\0'; @@ -206,7 +202,7 @@ static size_t __getattr(const char * path, list_for_each(p, &rib.reg_comps) { struct reg_comp * r = list_entry(p, struct reg_comp, next); if (strcmp(comp, r->path) == 0) { - size_t ret = r->ops->getattr(c + 1, &attr); + size_t ret = r->ops->getattr(path + 1, &attr); pthread_rwlock_unlock(&rib.lock); st->st_mode = S_IFREG | 0755; st->st_nlink = 1; @@ -231,7 +227,7 @@ static int rib_getattr(const char * path, memset(st, 0, sizeof(*st)); - if (strcmp(path, RT) == 0) + if (strcmp(path, RIB_SEPARATOR) == 0) goto finish_dir; pthread_rwlock_rdlock(&rib.lock); @@ -352,6 +348,9 @@ void rib_fini(void) struct list_head * p; struct list_head * h; + if (strlen(rib.mnt) == 0) + return; + fuse_exit(rib.fuse); fuse_unmount(rib.mnt, rib.ch); |