Lines Matching refs:pn
63 int ProcMatch(unsigned int len, const char *name, struct ProcDirEntry *pn)
65 if (len != pn->nameLen) {
68 return !strncmp(name, pn->name, len);
73 struct ProcDirEntry *pn = NULL;
77 return pn;
81 for (pn = parent->subdir; pn != NULL; pn = pn->next) {
82 if ((length == pn->nameLen) && strcmp(pn->name, name) == 0) {
87 return pn;
98 struct ProcDirEntry *pn = NULL;
113 return pn;
118 pn = &g_procRootDirEntry;
120 while ((pn != NULL) && (levelcount < leveltotal)) {
123 while (pn != NULL) {
126 while (pn != NULL) {
127 if (strcmp(path, pn->name) == 0) {
129 return pn;
131 pn = pn->next;
133 pn = NULL;
135 return pn;
139 if (pn == &g_procRootDirEntry) {
142 return pn;
146 if (ProcMatch(len, path, pn)) {
152 pn = pn->next;
155 if ((isfoundsub == 1) && (pn != NULL)) {
156 pn = pn->subdir;
158 pn = NULL;
160 return pn;
169 struct ProcDirEntry *pn = *parent;
174 if (pn == NULL) {
175 pn = &g_procRootDirEntry;
183 for (pn = pn->subdir; pn != NULL; pn = pn->next) {
184 if (ProcMatch(length, segment, pn)) {
188 if (pn == NULL) {
197 *parent = pn;
205 struct ProcDirEntry *pn = NULL;
210 return pn;
214 return pn;
218 return pn;
222 return pn;
225 pn = (struct ProcDirEntry *)malloc(sizeof(struct ProcDirEntry));
226 if (pn == NULL) {
234 (void)memset_s(pn, sizeof(struct ProcDirEntry), 0, sizeof(struct ProcDirEntry));
235 pn->nameLen = strlen(lastName);
236 pn->mode = mode;
237 ret = memcpy_s(pn->name, sizeof(pn->name), lastName, strlen(lastName) + 1);
239 free(pn);
243 pn->pf = (struct ProcFile *)malloc(sizeof(struct ProcFile));
244 if (pn->pf == NULL) {
245 free(pn);
248 (void)memset_s(pn->pf, sizeof(struct ProcFile), 0, sizeof(struct ProcFile));
249 pn->pf->pPDE = pn;
250 ret = memcpy_s(pn->pf->name, sizeof(pn->pf->name), pn->name, pn->nameLen + 1);
252 free(pn->pf);
253 free(pn);
257 atomic_set(&pn->count, 1);
258 spin_lock_init(&pn->pdeUnloadLock);
259 return pn;
262 static int ProcAddNode(struct ProcDirEntry *parent, struct ProcDirEntry *pn)
271 if (pn->parent != NULL) {
283 temp = ProcFindNode(parent, pn->name);
285 PRINT_ERR("Error!ProcDirEntry '%s/%s' already registered\n", parent->name, pn->name);
290 pn->parent = parent;
291 pn->next = parent->subdir;
292 parent->subdir = pn;
299 void ProcDetachNode(struct ProcDirEntry *pn)
301 struct ProcDirEntry *parent = pn->parent;
311 if (*iter == pn) {
312 *iter = pn->next;
317 pn->parent = NULL;
323 struct ProcDirEntry *pn = NULL;
326 pn = ProcAllocNode(&parent, name, S_IFDIR | mode);
327 if (pn == NULL) {
328 return pn;
330 pn->procFileOps = procFileOps;
331 pn->type = VNODE_TYPE_DIR;
332 ret = ProcAddNode(parent, pn);
334 free(pn->pf);
335 free(pn);
339 return pn;
345 struct ProcDirEntry *pn = NULL;
348 pn = ProcAllocNode(&parent, name, S_IFREG | mode);
349 if (pn == NULL) {
350 return pn;
353 pn->procFileOps = procFileOps;
354 pn->type = VNODE_TYPE_REG;
357 pn->type = VNODE_TYPE_VIR_LNK;
360 ret = ProcAddNode(parent, pn);
362 free(pn->pf);
363 free(pn);
367 return pn;
418 void ProcFreeEntry(struct ProcDirEntry *pn)
420 if (atomic_dec_and_test(&pn->count)) {
421 FreeProcEntry(pn);
425 void RemoveProcEntryTravalsal(struct ProcDirEntry *pn)
427 if (pn == NULL) {
430 RemoveProcEntryTravalsal(pn->next);
431 RemoveProcEntryTravalsal(pn->subdir);
433 ProcEntryClearVnode(pn);
435 ProcFreeEntry(pn);
440 struct ProcDirEntry *pn = NULL;
453 pn = ProcFindNode(parent, lastName);
454 if (pn == NULL) {
459 ProcDetachNode(pn);
463 RemoveProcEntryTravalsal(pn->subdir);
465 ProcEntryClearVnode(pn);
467 ProcFreeEntry(pn);
504 struct ProcDirEntry *pn = NULL;
508 pn = ProcFindEntry(file);
509 if (pn == NULL) {
512 ret = strncpy_s(buf->name, len, pn->name, len - 1);
517 buf->stMode = pn->mode;
518 buf->pPDE = pn;
523 static int GetNextDir(struct ProcDirEntry *pn, void *buf, size_t len)
527 if (pn->pdirCurrent == NULL) {
531 int namelen = pn->pdirCurrent->nameLen;
532 int ret = memcpy_s(buff, len, pn->pdirCurrent->name, namelen);
537 pn->pdirCurrent = pn->pdirCurrent->next;
538 pn->pf->fPos++;
594 struct ProcDirEntry *pn = ProcFindEntry(fileName);
595 if (pn == NULL) {
599 if (S_ISREG(pn->mode) && (pn->count != 1)) {
603 pn->flags = (unsigned int)(pn->flags) | (unsigned int)flags;
604 atomic_set(&pn->count, PROC_INUSE);
605 if (ProcOpen(pn->pf) != OK) {
608 if (S_ISREG(pn->mode) && (pn->procFileOps != NULL) && (pn->procFileOps->open != NULL)) {
609 (void)pn->procFileOps->open((struct Vnode *)pn, pn->pf);
611 if (S_ISDIR(pn->mode)) {
612 pn->pdirCurrent = pn->subdir;
613 pn->pf->fPos = 0;
616 return pn;