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

    +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
    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
    [...]
    	switch (dssdev->type) {
    #ifdef CONFIG_OMAP2_DSS_DPI
    	case OMAP_DISPLAY_TYPE_DPI:
    #endif
    #ifdef CONFIG_OMAP2_DSS_RFBI
    	case OMAP_DISPLAY_TYPE_DBI:
    #endif
    #ifdef CONFIG_OMAP2_DSS_SDI
    	case OMAP_DISPLAY_TYPE_SDI:
    #endif
    #ifdef CONFIG_OMAP2_DSS_DSI
    	case OMAP_DISPLAY_TYPE_DSI:
    #endif
    #ifdef CONFIG_OMAP2_DSS_VENC
    	case OMAP_DISPLAY_TYPE_VENC:
    #endif
    #ifdef CONFIG_OMAP2_DSS_HDMI
    	case OMAP_DISPLAY_TYPE_HDMI:
    #endif
    		break;
    	default:
    		DSSERR("Support for display '%s' not compiled in.\n",
    				dssdev->name);
    		return;
    	}
    
    	switch (dssdev->type) {
    #ifdef CONFIG_OMAP2_DSS_DPI
    	case OMAP_DISPLAY_TYPE_DPI:
    		r = dpi_init_display(dssdev);
    		break;
    #endif
    #ifdef CONFIG_OMAP2_DSS_RFBI
    	case OMAP_DISPLAY_TYPE_DBI:
    		r = rfbi_init_display(dssdev);
    		break;
    #endif
    #ifdef CONFIG_OMAP2_DSS_VENC
    	case OMAP_DISPLAY_TYPE_VENC:
    		r = venc_init_display(dssdev);
    		break;
    #endif
    #ifdef CONFIG_OMAP2_DSS_SDI
    	case OMAP_DISPLAY_TYPE_SDI:
    		r = sdi_init_display(dssdev);
    		break;
    #endif
    #ifdef CONFIG_OMAP2_DSS_DSI
    	case OMAP_DISPLAY_TYPE_DSI:
    		r = dsi_init_display(dssdev);
    		break;
    #endif
    #ifdef CONFIG_OMAP2_DSS_HDMI
    	case OMAP_DISPLAY_TYPE_HDMI:
    		r = hdmi_init_display(dssdev);
    		break;
    #endif
    	default:
    		BUG();
    	}
    
    	if (r) {
    		DSSERR("failed to init display %s\n", dssdev->name);
    		return;
    	}
    
    [...]

    linux kernel..
    Драйвер контроллера дисплея (drivers/video/omap2/dss/display.c).
    Про кошмар из #ifndef-ов молчу, но к чему первый switch?

    Запостил: grub670, 11 Апреля 2011

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

    • Омар, омар, омар - и в конце ЖУК!
      Ответить
    • Первый свич - это бланк. Скопировать куда надо, заполнить.
      Ответить
    • > Про кошмар из #ifndef-ов молчу
      А как по-другому обрабатывать конфиг ядра?

      >но к чему первый switch?
      Некроманты атакуют?
      http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commit;h=e528e3a8b4e005e6e2c9 e50fdee1ab7e84cf1e27
      Ответить
      • >А как по-другому обрабатывать конфиг ядра?
        это надо в .h файлах делать, а не в коде. В гайдлайнах это прямо указано.

        >http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commit;h=e528e3a8b4e005e6e2c9 e50fdee1ab7e84cf1e27
        наконец то :) жаль что только в next
        это ты поправил?
        Ответить
    • Как это "к чему первый switch"? Первый switch, соврешенно очевидным образом, предназначен для раннего отлова невключенных в сборку конфигураций. Если разница между ситуациями "поддержка конфигурации не включена" и "поддержка включена, но произошла ошибка инициализации". Вот первый switch и отлавливает первую ситуацию.

      Можно было, конечно, одним свичем сделать, но вот авторам захотелось так...
      Ответить
    • #if !defined(CONFIG_OMAP2_DSS_DPI) && !defined(CONFIG_OMAP2_DSS_RFBI) &&
      !defined(CONFIG_OMAP2_DSS_SDI) &&
      !defined(CONFIG_OMAP2_DSS_DSI) &&
      !defined(CONFIG_OMAP2_DSS_VENC) &&
      !defined(CONFIG_OMAP2_DSS_HDMI)
      #error FUCKING ERROR!
      #endif

      а хули?
      Ответить
      • Ребята хотели run-time error, а не compile-time error. Типа клиент не хочет платить за полную версию, а покупает лишь урезанную. Значит всякий раз когда он будет натыкаться на отсутствующие фичи, мы будем его мордой тыкать в то, что он когда-то пожадничал и недоплатил. Маркетинг!
        Ответить

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