XRootD
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
Definition: XrdFfsDent.cc:203
struct XrdFfsDentcache XrdFfsDentCaches[XrdFfsDent_NDENTCACHES]
Definition: XrdFfsDent.cc:204
void XrdFfsDent_dentcache_free(struct XrdFfsDentcache *cache)
Definition: XrdFfsDent.cc:154

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)
Definition: XrdFfsDent.cc:176
pthread_mutex_t XrdFfsDentCaches_mutex
Definition: XrdFfsDent.cc:205
int XrdFfsDent_dentcache_search(struct XrdFfsDentcache *cache, char *dname, char *dentname)
Definition: XrdFfsDent.cc:183
int XrdFfsDent_dentcache_expired(struct XrdFfsDentcache *cache)
Definition: XrdFfsDent.cc:169
void XrdFfsDent_dentcache_fill(struct XrdFfsDentcache *cache, char *dname, char ***dnarray, int nents)
Definition: XrdFfsDent.cc:140

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 }
unsigned int nents
Definition: XrdFfsDent.cc:135

References XrdFfsDentcache::dirname, XrdFfsDentcache::dnarray, XrdFfsDentcache::nents, XrdFfsDentcache::t0, 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.