XRootD
Loading...
Searching...
No Matches
XrdFfsDent.hh File Reference
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <pthread.h>
+ Include dependency graph for XrdFfsDent.hh:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  XrdFfsDentnames
 

Functions

void XrdFfsDent_cache_destroy ()
 
int XrdFfsDent_cache_fill (char *dname, char ***dnarray, int nents)
 
void XrdFfsDent_cache_init ()
 
int XrdFfsDent_cache_search (char *dname, char *dentname)
 
void XrdFfsDent_names_add (struct XrdFfsDentnames **p, char *name)
 
void XrdFfsDent_names_del (struct XrdFfsDentnames **p)
 
int XrdFfsDent_names_extract (struct XrdFfsDentnames **p, char ***dnarray)
 
void XrdFfsDent_names_join (struct XrdFfsDentnames **p, struct XrdFfsDentnames **n)
 

Class Documentation

◆ XrdFfsDentnames

struct XrdFfsDentnames

Definition at line 39 of file XrdFfsDent.hh.

+ Collaboration diagram for XrdFfsDentnames:
Class Members
char * name
struct XrdFfsDentnames * next

Function Documentation

◆ XrdFfsDent_cache_destroy()

void XrdFfsDent_cache_destroy ( )

Definition at line 261 of file XrdFfsDent.cc.

262{
263 int i;
264 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
266}
#define XrdFfsDent_NDENTCACHES
struct XrdFfsDentcache XrdFfsDentCaches[XrdFfsDent_NDENTCACHES]
void XrdFfsDent_dentcache_free(struct XrdFfsDentcache *cache)

References XrdFfsDent_dentcache_free(), XrdFfsDent_NDENTCACHES, and XrdFfsDentCaches.

+ Here is the call graph for this function:

◆ XrdFfsDent_cache_fill()

int XrdFfsDent_cache_fill ( char * dname,
char *** dnarray,
int nents )

Definition at line 219 of file XrdFfsDent.cc.

220{
221 int i;
222 pthread_mutex_lock(&XrdFfsDentCaches_mutex);
223 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
224 {
225 if (XrdFfsDent_dentcache_search(&XrdFfsDentCaches[i], dname, NULL) != 0)
226 {
228 XrdFfsDent_dentcache_fill(&XrdFfsDentCaches[i], dname, dnarray, nents);
229 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
230 return 1;
231 }
232 }
233 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
234 {
236 {
238 XrdFfsDent_dentcache_fill(&XrdFfsDentCaches[i], dname, dnarray, nents);
239 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
240 return 1;
241 }
242 }
243 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
244 return 0;
245}
int XrdFfsDent_dentcache_invalid(struct XrdFfsDentcache *cache)
pthread_mutex_t XrdFfsDentCaches_mutex
int XrdFfsDent_dentcache_search(struct XrdFfsDentcache *cache, char *dname, char *dentname)
int XrdFfsDent_dentcache_expired(struct XrdFfsDentcache *cache)
void XrdFfsDent_dentcache_fill(struct XrdFfsDentcache *cache, char *dname, char ***dnarray, int nents)

References XrdFfsDentcache::dnarray, XrdFfsDentcache::nents, XrdFfsDent_dentcache_expired(), XrdFfsDent_dentcache_fill(), XrdFfsDent_dentcache_free(), XrdFfsDent_dentcache_invalid(), XrdFfsDent_dentcache_search(), XrdFfsDent_NDENTCACHES, XrdFfsDentCaches, and XrdFfsDentCaches_mutex.

+ Here is the call graph for this function:

◆ XrdFfsDent_cache_init()

void XrdFfsDent_cache_init ( )

Definition at line 207 of file XrdFfsDent.cc.

208{
209 int i;
210 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
211 {
212 XrdFfsDentCaches[i].t0 = 0;
213 XrdFfsDentCaches[i].nents = 0;
214 XrdFfsDentCaches[i].dirname = strdup("");
215 XrdFfsDentCaches[i].dnarray = NULL;
216 }
217}

References XrdFfsDent_NDENTCACHES, and XrdFfsDentCaches.

Referenced by XrdFfsMisc_xrd_init().

+ Here is the caller graph for this function:

◆ XrdFfsDent_cache_search()

int XrdFfsDent_cache_search ( char * dname,
char * dentname )

Definition at line 247 of file XrdFfsDent.cc.

248{
249 int i, rval = 0;
250 pthread_mutex_lock(&XrdFfsDentCaches_mutex);
251 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
252 if (XrdFfsDent_dentcache_search(&XrdFfsDentCaches[i], dname, dentname) == 1)
253 {
254 rval = 1;
255 break;
256 }
257 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
258 return rval;
259}

References XrdFfsDent_dentcache_search(), XrdFfsDent_NDENTCACHES, XrdFfsDentCaches, and XrdFfsDentCaches_mutex.

Referenced by XrdFfsPosix_statall().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ XrdFfsDent_names_add()

void XrdFfsDent_names_add ( struct XrdFfsDentnames ** p,
char * name )

Definition at line 56 of file XrdFfsDent.cc.

57{
58 struct XrdFfsDentnames *n = (struct XrdFfsDentnames*)malloc(sizeof(struct XrdFfsDentnames));
59 n->name = strdup(name);
60
61 n->next = *p;
62 *p = n;
63 return;
64}
struct XrdFfsDentnames * next
Definition XrdFfsDent.hh:41

References XrdFfsDentnames::name, and XrdFfsDentnames::next.

Referenced by XrdFfsPosix_x_readdirall().

+ Here is the caller graph for this function:

◆ XrdFfsDent_names_del()

void XrdFfsDent_names_del ( struct XrdFfsDentnames ** p)

Definition at line 49 of file XrdFfsDent.cc.

50{
51 (*p)->name = NULL;
52 (*p)->next = NULL;
53 free(*p);
54}

Referenced by XrdFfsDent_names_extract().

+ Here is the caller graph for this function:

◆ XrdFfsDent_names_extract()

int XrdFfsDent_names_extract ( struct XrdFfsDentnames ** p,
char *** dnarray )

Definition at line 100 of file XrdFfsDent.cc.

101{
102 struct XrdFfsDentnames *x, *y;
103 int i = 0;
104
105 y = *p;
106 while (y != NULL)
107 {
108 i++;
109 y = y->next;
110 }
111 /* be careful, old dnarray is lost */
112 *dnarray = (char**) malloc(sizeof(char*) * i);
113
114 x = *p;
115 y = *p;
116 i = 0;
117 while (y != NULL)
118 {
119 (*dnarray)[i++] = y->name;
120 y = y->next;
122 x = y;
123 }
124
125 qsort((*dnarray), i, sizeof(char*), XrdFfsDent_cstr_cmp);
126 *p = NULL;
127 return i;
128}
void XrdFfsDent_names_del(struct XrdFfsDentnames **p)
Definition XrdFfsDent.cc:49
int XrdFfsDent_cstr_cmp(const void *a, const void *b)
Definition XrdFfsDent.cc:39

References XrdFfsDentnames::name, XrdFfsDentnames::next, XrdFfsDent_cstr_cmp(), and XrdFfsDent_names_del().

+ Here is the call graph for this function:

◆ XrdFfsDent_names_join()

void XrdFfsDent_names_join ( struct XrdFfsDentnames ** p,
struct XrdFfsDentnames ** n )

Definition at line 78 of file XrdFfsDent.cc.

79{
80 struct XrdFfsDentnames *t, *l = 0;
81
82 if ( *p != NULL )
83 {
84 t = *p;
85 while ( t != NULL )
86 {
87 l = t;
88 t = t->next;
89 }
90 l->next = *n;
91 }
92 else
93 *p = *n;
94}

References XrdFfsDentnames::next.