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

    +136

    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
    static int internal_CheckMac(char * inc_mac)
    {
            int return_value = 0x1;
    
            if (strlen(inc_mac) != 17)
            {
                    return return_value;
            }
    
            unsigned int i = 0x0;
            for (i = 3; i <=17; i=i+2)
            {
                    if (inc_mac[i-1] != 58)
                    {
                            return_value = 0x1;
                            break;
                    }
                    else
                            return_value = 0x0;
                    i++;
            }
    
            return return_value;
    }

    Функция проверяет содержимое строки. В строке должен быть мак адрес формата 00:01:02:03:04:05. 58 в строке 13 - это десятичное значение символа ":"
    Авторство функции принадлежит Виталию Кострову, великому программисту из Рыбинска. После ревизии этого кода пришло понимание что надо избавляться от этого сотрудника.

    evgeny, 19 Июля 2012

    Комментарии (125)
  2. Си / Говнокод #11435

    +118

    1. 1
    2. 2
    3. 3
    4. 4
    filename_size = strlen(dest_dir) + strlen(basename) + 6;
        ctx.mtl_file = (char *) malloc(filename_size);
        ctx.obj_file = (char *) malloc(filename_size);
        sprintf(ctx.mtl_file, "%s/%s.mtl", dest_dir, basename);

    Долго соображали, почему вылезает сегфолт во free...

    someone, 18 Июля 2012

    Комментарии (48)
  3. Си / Говнокод #11433

    +141

    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
    static struct passwd *pd=getpwuid(st->st_uid);
      if(pd==NULL){
        fprintf(stderr, "no correspound user!\n");
      }
      char *perm=(char*)malloc(16);
      if(perm==NULL){fprintf(stderr, "out of memory!\n");return -1;}
       memset( perm,'\0',16); 
      if(st->st_mode & S_ISUID){perm[0]='s';} else perm[0]='-';
      if(st->st_mode & S_IRUSR){perm[1]='r';} else perm[1]='-';
      if(st->st_mode & S_IWUSR){perm[2]='w';} else perm[2]='-';
      if(st->st_mode & S_IXUSR){perm[3]='x';} else perm[3]='-';
      if(st->st_mode & S_IRGRP){perm[4]='r';} else perm[4]='-';
      if(st->st_mode & S_IWGRP){perm[5]='w';} else perm[5]='-';
      if(st->st_mode & S_IXGRP){perm[6]='x';} else perm[6]='-';
      if(st->st_mode & S_IROTH){perm[7]='r';} else perm[7]='-';
      if(st->st_mode & S_IWOTH){perm[8]='w';} else perm[8]='-';
      if(st->st_mode & S_IXOTH){
        if(st->st_mode & S_ISVTX){
          perm[9]='t';
        }
       else perm[9]='x';
        
      } else perm[9]='-';
      if(st->st_mode & S_ISUID){
       if(st->st_mode & S_IXUSR){
         perm[4]='s';
       } else perm[4]='S';
      }
       if(st->st_mode & S_ISGID){
        if(st->st_mode & S_IXGRP){
        perm[7]='s';
        } else perm[7]='S';
      }
      if(st->st_mode & S_ISVTX){
        if(st->st_mode & S_IXOTH){perm[9]='t';} else {
        perm[9]='T';
        }
      }
       if((st->st_mode & S_IFMT) == S_IFDIR) { perm[0]='d';}
       if((st->st_mode & S_IFMT)==S_IFSOCK){ perm[0]='s';}
       if((st->st_mode & S_IFMT) == S_IFCHR) { perm[0]='c';}
       if((st->st_mode & S_IFMT)==S_IFCHR){perm[0]='c';} else if(st->st_mode & S_IFBLK){perm[0]='b';} else
       if((st->st_mode & S_IFMT)== S_IFREG){ perm[0]='-';}
       if((st->st_mode &S_IFMT)==S_IFBLK) { perm[0]='b';}
       if((st->st_mode & S_IFMT)==S_IFIFO) { perm[0]='p';}
       if((st->st_mode & S_IFMT)== S_IFLNK){ perm[0]='l';}
      if(!S_ISDIR(st->st_mode)){
          if(S_ISREG(st->st_mode)){
    	printf("<file type=\"regular file\" permissions=\"%s\" owner=\"%s\" group=\"%d\" size=\"%d\">%s</file>\n",perm,pd->pw_name,st->st_gid,st->st_size,dir);
    	return 0;
          };

    Права доступа

    AliceGoth, 17 Июля 2012

    Комментарии (10)
  4. Си / Говнокод #11432

    +142

    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
    void do_statfs(const struct mntent *fs)
    {
    	struct statvfs vfs;
    
       	if (fs->mnt_fsname[0] != '/')	/* skip nonreal filesystems */
       		return;
    
    	if (statvfs(fs->mnt_dir, & vfs) != 0) {
    		fprintf(stderr, "%s: %s: statfs failed: %s\n",
    			myname, fs->mnt_dir, strerror(errno));
    		errors++;
    		return;
    	}
    	if(fi!=1){
    	long used = 100 - (int)(((float)vfs.f_bfree/(float)vfs.f_blocks)*100);
    	printf("%12s", fs->mnt_fsname);//Filesystem
    	printf("%16ld",((vfs.f_blocks)>>10)*vfs.f_bsize);//1K-blocks
     	printf("%11ld", ((vfs.f_blocks - vfs.f_bfree)>>10)*vfs.f_bsize);//Used
    	printf("%11ld",(vfs.f_bavail>>10)*vfs.f_bsize);		//Available
    	if(used>0 && used<=100){
    	printf("%8d%%    ", 100 - (int)(((float)vfs.f_bfree/(float)vfs.f_blocks)*100));//Use%
    	} else { printf("%8s    ","-");}
    	} else {
    	  long used = 100 - (int)(((float)vfs.f_ffree/(float)vfs.f_files)*100);
    	  printf("%8s", fs->mnt_fsname);//Filesystem
    	  printf("%11ld",vfs.f_files);//Inodes
    	  printf("%11ld", (vfs.f_files - vfs.f_ffree));//IUsed
    	  printf("%11ld",vfs.f_ffree);//IFree
    	  if(used>0 && used<=100){
    	    printf("%8d%%    ", used);//Use%
    	} else { printf("%8s    ","-");}
    	}
    	printf("%s\n", fs->mnt_dir);//Mounted on
    }

    Свой df

    AliceGoth, 17 Июля 2012

    Комментарии (0)
  5. Си / Говнокод #11431

    +141

    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
    char **fpwd=(char**)malloc(160);
    int lstat(const char *path, struct stat *buf);
    int process_dir(const char *dir,struct stat *st1,ino_t cit);
    char *cdir=".";
    ino_t ci=0;
    struct stat cstat;
    int errors = 0;
    char *myname;
    int cnt=0;
    int main(int argc,char **argv){
      myname=argv[0];
      cdir=(char*)malloc(512);
      if(cdir==NULL){
        perror("Not sufficient memory");
        errors++;
        return -1;
      }
       memset(cdir,'\0',512);
      strcat(cdir,cdir);
      strcat(cdir,".");
      if(fpwd==NULL){
        fprintf(stderr, "%s: out of memory: %s\n",
      			myname, strerror(errno));
      		errors++;
     		return 0;
     }
    for(int i=0;i<=160;i++){
      *(fpwd+i)=(char*)malloc(1600);
     if(*(fpwd+i)==NULL){perror("Not sufficient memory");
     errors++;
     return -1;
     }
    }
    while(ci!=2){
      if(lstat(".",&cstat)==-1){
        fprintf(stderr, "%s: can't find file:%s %s\n",
     			myname, cdir, strerror(errno));
        errors++;
    	return -1;
      };
      ci=cstat.st_ino;
      if(process_dir("..",&cstat,ci)==-1){
            fprintf(stderr, "%s: can't process dir:%s %s\n",
     			myname, cdir, strerror(errno));
        errors++;
    	return -1;
      };
      int fd=open("..",O_RDONLY);
      if(fd<0){
       perror("open");
       errors++;return -1;
      }
        if(fchdir(fd)==-1){
          fprintf(stderr, "%s: can't chdir:%s\n",
     			myname, strerror(errno));
        errors++;return -1;
        };
        strcat(cdir,"/..");
    }
     for(int i=cnt-1;i>=0;i--){
        printf("/%s",fpwd[i]);
      }
      printf("\n");return 0;
    }
    int process_dir(const char *dir,struct stat *st1,ino_t cit/*,char **fpwd*/){
        DIR *dp;
        struct dirent *ent;
        struct stat *dstat;
        if ((dp = opendir(dir)) == NULL) {
    		fprintf(stderr, "%s: cannot open for reading: %s\n", dir, strerror(errno));errors++;return -1;
    	}
        if(lstat(dir,dstat)==-1){
    	    fprintf(stderr, "%s: can't find file:%s %s\n",
     			myname, cdir, strerror(errno));
    			errors++;
    	return -1;
          }
    	while ((ent = readdir(dp)) != NULL){
    	  if(ent->d_ino==cit && strcmp(ent->d_name,".")!=0 && strcmp(ent->d_name,"..")!=0){
    	    strcat(fpwd[cnt++],ent->d_name);
    	     if (closedir(dp) != 0) {
    		fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
    		errors++;
    		return 1;
    	      }
    	    return 0;
    	  }
    	}
    	if (closedir(dp) != 0) {
    		fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
    		errors++;
    		return 1;
    	}
    	return 0;
    }

    AliceGoth, 17 Июля 2012

    Комментарии (0)
  6. Си / Говнокод #11398

    +113

    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
    #include <stdio.h>
     
    int main()
    {
            void say_hello()
            {
                    puts("Hello govnokod!");
            }
     
            say_hello();
    
    	return 0;
    }

    http://ideone.com/QZipp

    rat4, 11 Июля 2012

    Комментарии (78)
  7. Си / Говнокод #11392

    +141

    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
    int main()
      {
        int i = 0;
        goto A;
        for (;i<3; ++i)
        L:{
            {
              int x;
              x += i;
              if (0) { A: x = 0; goto B; }
              printf("X: %d ",x);
            }
            {
              int y;
              y -= i;
              if (0) { B: y = 10; goto L; }
              printf("Y: %d\n",y);
            }
          }
      }

    Отсюда: http://rsdn.ru/forum/cpp/4812647.flat.aspx Автор походу уверен в гениальности кода.

    slavap, 10 Июля 2012

    Комментарии (41)
  8. Си / Говнокод #11374

    +121

    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
    #include "uni.h"
    
    int getopt_long(int argc, char *const argv[],const char *optstring,const struct option *longopts, int *longindex);
    int getopt__long_only(int argc, char *const argv[],const char *optstring,const struct option *longopts, int *longindex);
    int chown(const char *path, uid_t owner, gid_t group);
    uid_t getuid(void);
    int mkdir(const char *pathname, mode_t mode);
    gid_t getgid(void);
    
    char *dirname;
    mode_t perm;
    uid_t owner;
    gid_t group;
    
    int main(int argc,char **argv){
      owner=getuid();
      group=getgid();
      perm=0600;
    char *pEnd;
    char *dirname=(char*)malloc(16);
      if(dirname==NULL){fprintf(stderr, "out of memory!\n");return -1;}
       memset( dirname,'\0',16); 
       strcat(dirname,argv[argc-1]);
    struct option longopts[] = {
      { "mode", required_argument, NULL, 'm' },
      { "parents", NULL, NULL, 'p'},
      { "verbose", required_argument, NULL, 'v'},
      { "context", required_argument, NULL, 'c'},
      { "help", NULL, NULL, 'h'},
      { "version", NULL, NULL, 'r'},
    { 0, 0, 0, 0 } 
    };
    char c;
    while((c=getopt_long(argc,argv,"m:p:v:c:r:h",longopts,NULL)) != -1) {
      switch (c) {
        case 'm':
          perm=strtol(optarg,&pEnd,8);
          printf("%s\n",pEnd);
          break;
        case 'p':
          if(rmdir(dirname)<0){
            fprintf(stderr, "don't manage to delete folder!\n");return -1;
          }
          break;
        case 'v':
          if(mkdir(dirname,perm)<0){
            fprintf(stderr, "mkdir: cannot create directory `%s`: file exists\n",dirname);return -1;
          } else {
            printf("mkdir: created directory `%s`\n",dirname);
            return 0;
          }
          break;
        case 'c':
          break;
        case 'h':
          printf("Usage: mkdir [OPTION]... DIRECTORY...\n");
          printf("Create the DIRECTORY(ies), if they do not already exist.\n");
          printf("\n");
          printf("Mandatory arguments to long options are mandatory for short options too.\n");
          printf("  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask\n");
          printf("  -p, --parents     no error if existing, make parent directories as needed\n");
          printf("  -v, --verbose     print a message for each created directory\n");
          printf("  -Z, --context=CTX  set the SELinux security context of each created\n");
          printf("                      directory to CTX\n");
          printf("      --help     display this help and exit\n");
          printf("      --version  output version information and exit\n");
          printf("\tAuthor AliceGoth\n");
          return 0;
          break;
        case 'r':
          printf("\tMy own mkdir\n");
          printf("\tVersion 1.0\n");
          printf("\tAuthor AliceGoth\n");
          printf("\tEmail [email protected]\n");
          break;
        case 1:

    Мой mkdir

    AliceGoth, 07 Июля 2012

    Комментарии (28)
  9. Си / Говнокод #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)
  10. Си / Говнокод #11347

    +133

    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
    int * lPtr=item;
    int * lPtrEnd = item + count;
    
    for (lPtr = item ; lPtr < lPtrEnd && *lPtr<fid ; lPtr+=4);
    if( lPtr >= lPtrEnd ) lPtr=lPtrEnd-1; // last element
    if(*lPtr != fid)
    {
            if(--lPtr >=item)
            {   
                    if(*lPtr!= fid)
                    {   
                            if(--lPtr >=item)
                            {   
                                    if(*lPtr!= fid)
                                    {   
                                            if(--lPtr >=item)
                                            {   
                                                    if(*lPtr!= fid)
                                                    {   
                                                            break; // value not found
                                                    }   
                                            } else break;
                                    }   
                            }  else break;
                    }   
            } else break;
    }
    
    
    if( lPtr > item)
    {
            while ( *(lPtr-1) == fid && lPtr > item) lPtr--; // first ocurence of fid
    }

    Быстрый алгоритм поиска

    wtfcode, 03 Июля 2012

    Комментарии (43)