Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
955 B

  1. #include <sys/stat.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "links.h"
  5. static LIST_ENTRY LinkList;
  6. void
  7. InitLinkList(void)
  8. {
  9. InitializeListHead(&LinkList);
  10. }
  11. PLINKFILE
  12. GetLinkByIno(ino_t ino)
  13. {
  14. PLINKFILE p;
  15. for (p = (void *)LinkList.Flink; p != (void *)&LinkList;
  16. p = (void *)p->links.Flink) {
  17. if (p->ino == ino) {
  18. return p;
  19. }
  20. }
  21. return NULL;
  22. }
  23. PLINKFILE
  24. GetLinkByName(char *pchName)
  25. {
  26. PLINKFILE p;
  27. for (p = (PLINKFILE)LinkList.Flink; p != (PLINKFILE)&LinkList;
  28. p = (void *)p->links.Flink) {
  29. if (0 == strcmp(p->name, pchName)) {
  30. return p;
  31. }
  32. }
  33. return NULL;
  34. }
  35. void
  36. AddLinkList(struct stat *pstat, char *pchName)
  37. {
  38. PLINKFILE pl;
  39. char *pch;
  40. pl = malloc(sizeof(*pl));
  41. if (NULL == pl) {
  42. return;
  43. }
  44. pch = strdup(pchName);
  45. if (NULL == pch) {
  46. free(pl);
  47. return;
  48. }
  49. pl->nlink = pstat->st_nlink;
  50. pl->name = pch;
  51. pl->dev = pstat->st_dev;
  52. pl->ino = pstat->st_ino;
  53. InsertTailList(&LinkList, &pl->links);
  54. }