1. Си / Говнокод #11373

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    #include "uni.h"
    #include "xreadlink.h"
    
    int process(char *dir);
    char *cd;
    char *scd;
    struct stat st1;
    
    ino_t cino;
    dev_t cdev;
    int main(){
    cd = (char *)malloc(160+1);
    if(cd==NULL){
     perror("Not enough memory");
     return -1;
    }
    scd = (char *)malloc(1600+1);
    if(scd==NULL){
     perror("Not enough memory");
     return -1;
    }
    memset(cd,'\0',1601);
    memset(scd,'\0',1601);
    strcat(scd,".");
    if(lstat(scd,&st1)==-1){
       perror("stat");
                   exit(EXIT_FAILURE);
    };
    cino = st1.st_ino;
    cdev = st1.st_rdev;
    //printf("inode %lu cdev %llu\n",cino,cdev);
      process(scd);
      return 0;
    };
    
    int process(char *dir){
      DIR *dp;
      struct dirent *ent;
      ino_t lino;
    dev_t ldev;
      ino_t lino2;
    dev_t ldev2;
    int cnt=0;
    char *mydir=(char*)malloc(1600);
    char *mydir2=(char*)malloc(1600);
    char **fpwd=(char**)malloc(160);
    for(int i=0;i<=160;i++){
      *(fpwd+i)=(char*)malloc(1600);
     if(*(fpwd+i)==NULL){perror("Not sufficient memory");
     return -1;
     }
    }
    if(mydir==NULL)return -1;
    if(*fpwd==NULL)return -1;
    strcpy(mydir,dir);
    strcpy(mydir2,dir);
    struct stat lstt;
    struct stat lstt2;
    struct stat stt;
      while(lino!=lino2 || ldev!=ldev2){
        if(lstat(mydir,&lstt)==-1){
            perror("not sufficient memory");
            return -1;
        }
        strcat(mydir2,"/..");
         if(lstat(mydir2,&lstt2)==-1){
            perror("not sufficient memory");
            return -1;
        }
        //printf("yes\n");
        lino=lstt.st_ino;
        ldev=lstt.st_rdev;
        lino2=lstt2.st_ino;
        ldev2=lstt2.st_rdev;
        if ((dp = opendir(mydir2)) == NULL) {
                    fprintf(stderr, "%s: cannot open for reading: %s\n", dir, strerror(errno));
                    return 1;
            }
          if(lstat(mydir2,&stt)==-1){
            perror("not sufficient memory");
            return -1;
          }
          //if(chdir("/")<0){perror("chdir");return -1;};
            while ((ent = readdir(dp)) != NULL){
             if(ent->d_ino==lino && strcmp(ent->d_name,".")!=0 && strcmp(ent->d_name,"..")!=0 && stt.st_rdev==ldev){
                    //printf("%8ld %s\n", ent->d_ino, ent->d_name);
                    strcat(fpwd[cnt++],ent->d_name);
             }
            }
            if (closedir(dp) != 0) {
                    fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
                    return 1;
            }
        //printf("mydir %s inode %lu cdev %llu inode %lu cdev %llu\n",mydir,lino,ldev,lino2,ldev2);
            strcat(mydir,"/..");
        strcpy(mydir2,mydir);
      }

    Поиск текущего каталога в дереве каталогов.

    Запостил: AliceGoth, 07 Июля 2012

    Комментарии (0) RSS

    Добавить комментарий

    Ошибка компиляции комментария:
    1. Гости могут высказаться только в понедельник, среду, четверг или воскресение
    ava Семь раз отмерь — один отрежь, guest!
    А не использовать ли нам bbcode?
    • [b]жирный[/b] — жирный
    • [i]курсив[/i] — курсив
    • [u]подчеркнутый[/u] — подчеркнутый
    • [s]перечеркнутый[/s] — перечеркнутый
    • [blink]мигающий[/blink] — мигающий
    • [color=red]цвет[/color] — цвет (подробнее)
    • [size=20]размер[/size] — размер (подробнее)
    • [code=<language>]some code[/code] (подробнее)
    Проверочный код