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

    +135

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    static enum rc (*request_functions[])(void) = {
        ko,
        koko,
        kokoko,
        illegal_request
    };
    static inline enum rc illegal_request(void) { return ILLEGAL_REQUEST; }
    
    reply.rc = request_functions[cmd.opcode < NKEYS(request_functions) ? cmd.opcode : ILLEGAL_REQUEST]();

    Вызываем функцию по опкоду с абортом в случае index_out_of_bounds.

    codemonkey, 12 Ноября 2014

    Комментарии (38)
  2. Ruby / Говнокод #17095

    −82

    1. 1
    2. 2
    3. 3
    4. 4
    @old_article_purchase.old_article.warehouse_placement = '102A1'
    if @old_article_purchase.old_article.valid?
       @old_article_purchase.old_article.save   
     end

    andrejlr, 12 Ноября 2014

    Комментарии (2)
  3. Objective C / Говнокод #17094

    −396

    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
    @implementation SlideMenuNavigationBar
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
    
        for (UIView *aView in self.subviews) {
            
            // Correcting menu toggle button position
            if ([[aView.class description] isEqualToString:@"UIButton"] && aView.frame.origin.x < self.frame.size.width/2) {
                CGRect frame = aView.frame;
                frame.origin.x = 12; // 8 for correlation
                frame.origin.y = -1; // 1 for correlation
                aView.frame = frame;
            }
            
            if (aView.frame.origin.x > self.frame.size.width/2 && !isIPad && ![[aView.class description] isEqualToString:@"ColoredView"]) {
                CGRect frame = aView.frame;
                frame.origin.x = 260; // 8 for correlation
                frame.origin.y = -1;  // 1 for correlation
                aView.frame = frame;
            }
            
            // Correcting back button and right button positions
            if ([[aView.class description] isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
                CGRect frame = aView.frame;
                frame.origin.y = [self.class navigationBarHeight] - kDefaultNavigationBarHeight + 5; // 5 for correlation
                aView.frame = frame;
            }
            if ([[aView.class description] isEqualToString:@"UINavigationButton"]) {
                CGRect frame = aView.frame;
                frame.origin.y = [self.class navigationBarHeight] - kDefaultNavigationBarHeight + 2; // 2 for correlation
                aView.frame = frame;
            }
            
            if ([aView isKindOfClass:[NavigationBarButton class]]) {
                CGRect frame = aView.frame;
                frame.origin.x = 278; // 8 for correlation
                frame.origin.y = 6;   // 1 for correlation
                aView.frame = frame;
            }
        }
    }
    
    @end

    фиг знает что думали :D

    l0gg3r, 11 Ноября 2014

    Комментарии (6)
  4. C++ / Говнокод #17093

    +50

    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
    #include <iostream>
    using namespace std;
    
    void f(int i)
    {
    	cout << "----" << endl;
    	void *array[] = { &&foo, &&bar, &&baz };
    	goto *array[i];
    	foo:
    	cout << "Foo" << endl;
    	bar:
    	cout << "Bar" << endl;
    	baz:
    	cout << "Baz" << endl;
    }
    
    int main() {
    	// your code goes here
    	f(0);
    	f(1);
    	f(2);
    	return 0;
    }

    http://ideone.com/63tRls
    gcc extension

    DlangGovno, 10 Ноября 2014

    Комментарии (108)
  5. PHP / Говнокод #17091

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // Real itemid is "contained" in public itemid in a bit tricky way. The formula is:
    
    public_itemid = itemid * 256 + anum
    
    // Quite easy, isn't it? Except where to get that anum. anum is some number assigned when you create a new post in LJ.
    
    // But in fact, you don't need it. Because it is always less than 256, we can avoid searching for it, and just use simple Math to find itemid.
    
    $anum = $public_itemid - floor($public_itemid / 256) * 256;
    $itemid = ($public_itemid - $anum) / 256;

    Прекрасный подход, то место, где вордпресс и ЖЖ сошлись воедино.

    http://drumrock.skipitnow.org/livejournal-tools/itemid/

    Fike, 10 Ноября 2014

    Комментарии (1)
  6. PHP / Говнокод #17090

    +159

    1. 1
    $image_type = substr($image_data,strpos($image_data, '/')+1,strpos($image_data, ';')-(strpos($image_data, '/')+1));

    Выдирание типа из заголовка base64-закодированного изображения (data:image/jpeg;base64,......................)

    Anxizzz, 10 Ноября 2014

    Комментарии (13)
  7. C# / Говнокод #17089

    +134

    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
    class ParametersArray
    {
            ...
            /// <summary>
            /// Копирующей конструктор (создает копию коллекции)
            /// </summary>
            /// <param name="prs">Коллекция на основе, которой будет создаваться копия</param>
            public ParametersArray(ParametersArray prs)
            {
                paParameters = new ArrayList();
                for (int i = 0; i < prs.Count; i++)
                {
                    Parameter p = new Parameter(prs[i]);
                    paParameters.Add(p);
                }
            }
            ...
            #region Внутренние состояния
    
            /// <summary>
            /// Внутреннее поле - массив параметров
            /// </summary>
            private ArrayList paParameters;
    
            /// <summary>
            /// Внутреннее поле – идентификатор операции, к которой относятся параметры
            /// </summary>
            private string paOperationId = "";
    
            #endregion
            /// <summary>
            /// Удаляет параметр из коллекции
            /// </summary>
            /// <param name="parameterId">Идентификатор параметра</param>
            public void Delete(string parameterId)
            {
                ArrayList list = new ArrayList();
    
                foreach (Parameter prt in paParameters)
                {
                    if (prt.Id.Trim() != parameterId.Trim())
                    {
                        list.Add(prt);
                    }
                }
                paParameters = list;
            }
        }
    }
    
    ...
    
      /// <summary>
      /// Класс для поиска и обработки шаблонов в параметрах операций
      /// </summary>
      public class Parser
      {
        ...
        #region Конструкторы
    
        /// <summary>
        /// Конструктор инициализирующей класс
        /// </summary>
        /// <param name="requestUserId">ID пользователя, который используется для обработки шаблона ##USER()</param>
        public Parser(string requestUserId)
        {
          pParameters = null;
          pUserId = requestUserId;
        }
    
        #endregion
    
        #region Внешние методы
    
        /// <summary>
        /// Метод перебирает все параметры операции, ищет там шаблоны и заменяет их значениями
        /// </summary>
        /// <param name="opr">Операция</param>
        /// <returns>Операция с обработанными шаблонами</returns>
        public Operation Parse(Operation opr)
        {
          pParameters = new ParametersArray(opr.Parameters);
    
          for (int i = 0; i < pParameters.Count; i++)
            if (FindTemplate(pParameters[i]))
            {
              ReplaceTemplate(pParameters[i]);
    
              //Удаляет параметр с ошибкой
              if (pParameters[i].Value == "parse err")
                pParameters.Delete(pParameters[i].Id);
            }
    
          opr.Parameters = new ParametersArray(pParameters);
          return opr;
        }

    Внимание привлекает код в строках 81-95

    В строке 81-82 мы создаём временную копию параметров операции opr во внутреннем поле класса Parser. Прекрасно. Ещё раз - в публичном в методе инициализируем внутреннее поле (Классный side effect - поле используется в других методах).

    В строке 91 удаляет элемент из внутренней коллекции, пересоздавая коллекцию целиком, то есть требования к памяти временно удваиваются на выходе из метода Delete (до очистки памяти). В методе Delete. Да. Супер.
    потом инициализируем вновь созданной коллекцией публичное поле Parameters во входящем параметре opr метода Delete.

    P.S.: Диагноз - хроническая форма неизлечимой Java. Во первых, автор этих строк искренне думает, что в природе ничего, кроме коллекции ArrayList, не существует. Во вторых, для удаления элемента коллекции мы пересоздаём всю коллекцию целиком, то есть видимо искренне полагая, что коллекция ArrayList - immutable, как и все поля класса Parser (типа ParametersArray) равно как и поле класса ParametersArray (типа ArrayList). Занавес.

    Говнокодище.

    hack2root, 10 Ноября 2014

    Комментарии (7)
  8. PHP / Говнокод #17088

    +158

    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
    <?php
    	public function clearCache() {
    		if(method_exists('regedit', 'getControllerHost')) {
    			$host = regedit::getControllerHost(true);
    			if(!is_null($host)){
    				$host->cacheClear();
    			} else {
    				$sDir = rtrim(mainConfiguration::getInstance()->includeParam('system.static-cache'), '/');
    				if(getServer('WINDIR') || getServer('windir')){
    					$arDirs = glob($sDir . '/*');
    					foreach($arDirs as $item){
    						$item = rtrim($item, "\\/ ") . "/";
    						exec("rd /s /q $item");
    					}
    				} else {
    					exec("rm -rf $sDir/*");
    				}
    			}
    		} else {
    			$sDir = rtrim(mainConfiguration::getInstance()->includeParam('system.static-cache'), '/');
    			if(getServer('WINDIR') || getServer('windir')) {
    				$arDirs = glob($sDir . '/*');
    				foreach($arDirs as $item) {
    					$item = rtrim($item, "\\/ ") . "/";
    					exec("rd /s /q $item");
    				}
    			} else {
    				exec("rm -rf $sDir/*");
    			}
    		}
    	}

    Найди два отличия.

    Elfet, 10 Ноября 2014

    Комментарии (22)
  9. Си / Говнокод #17087

    +135

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    main(){    
        
        FILE *filein, *fileout;
        
        char fname1[15], fname2[15];
        int n, m;
        int i, j;
        
        printf("Enter name of input file: "); scanf("%s", &fname1);
        printf("Enter name of output file: "); scanf("%s", &fname2);
        
        filein=fopen(fname1, "r");
        fileout=fopen(fname2, "w");
        if(filein==NULL){
          fprintf(stderr, "\nError: can't open file \"%s\"\n\n", fname1);
          fclose(filein);
          fclose(fileout);
          getch();
          }
        else{
             fscanf(filein, "%d%d", &n, &m);
             char ch[m][n];
             int array[m][n];
             int V[m][n];
             
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   V[i][j]=0;
                   }
                }
             
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   fscanf(filein, "%s", &ch[i][j]);
                   if(ch[i][j]=='+') array[i][j]=1;
                   else if(ch[i][j]=='-') array[i][j]=0;
                   }
                }
             
             int sum;
             for(i=0;i<m;i++){
                sum=0;
                for(j=0;j<n;j++){
                   sum+=array[i][j];
                   }
                   if(sum==1){
                             for(j=0;j<n;j++){
                                V[i][j]=array[i][j];
                                }
                             }
                   else continue;
                }
                
             int mm=0, c;
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   mm+=V[i][j];
                   }
                }
             c = m-mm;
             
             int VoteArray[n];
             
             for(j=0;j<n;j++){
                sum=0;
                for(i=0;i<m;i++){
                   sum+=V[i][j];
                   VoteArray[j]=sum;
                   }
                }
             
             float percent[n];
             float per;
             per = 100/(float)c;
             for(i=0;i<n;i++){
                
                if((percent[i]=per*VoteArray[i])>=7.0) fprintf(fileout, "%d ", i+1);
                }
                
             }
        
        fclose(fileout);
        fclose(filein);
        puts("\nMission comleted\nPress any key...\n");
        getch();
    }

    Фу, блять

    Sushev, 09 Ноября 2014

    Комментарии (25)
  10. PHP / Говнокод #17085

    +157

    1. 1
    2. 2
    3. 3
    4. 4
    foreach ($account->lists as $list) {
    print "LIST Name: " . $list->name; echo '&nbsp'; echo '&nbsp'; echo '&nbsp'; print "LIST Id: " . $list->id;
    echo "<br>";
    }

    Не говоря о том, что особой разницы между print и echo в ПХП нет, стоит отметить, что после «nbsp» пропущены точки с запятыми и всё тело этого фора можно было бы вывести одной строчкой.

    KEKC, 08 Ноября 2014

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