1. C++ / Говнокод #22010

    −22

    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
    /**
     * Generator for the opera:credits (third-party information) document.
     */
    class OperaCredits : public OpGeneratedDocument
    {
    public:
    
    	/**
    	 * Fills a string with the third party credit information in opera:about
    	 * (and opera:credits, if enabled).
    	 *
    	 * @param[in] str An OpString to write to.
    	 * @param[in] rtl Whether or not the text should be right-to-left.
    	 *
    	 * @return OK on success, or any error reported by URL or string code.
    	 */
    	static OP_STATUS GetString(OpString &str, BOOL rtl);
    
    #ifdef OPERA_CREDITS_PAGE
    
    	/**
    	 * Constructor for the credits page generator.
    	 *
    	 * @param url URL to write to.
    	 */
    	OperaCredits(URL &url) : OpGeneratedDocument(url, OpGeneratedDocument::HTML5) {}
    
    	/**
    	 * Generate the credits document to the specified internal URL.
    	 *
    	 * @return OK on success, or any error reported by URL or string code.
    	 */
    	virtual OP_STATUS GenerateData();
    
    #endif // OPERA_CREDITS_PAGE
    };

    Оттуда.

    Конструктор не нужен. Можем спрятать его в ифдеф.

    Запостил: inkanus-gray, 20 Января 2017

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

    • SEO-пост.
      Ответить
    • А конструктор по умолчанию приватный?
      Ответить
      • Вообще да, но в сабжевом коде стоит public: в самом начале
        Ответить
        • А если конструктор явно не описан (как здесь, когда условие #ifdef не выполнено)?
          Ответить
          • > явно не описан (как здесь
            Печаль.

            Да, тот мой комментарий выше надо было читать так: А конструктор по умолчанию авторы кода сделали приватным, чтоб его автоматическая реализация питушни не наделала?
            Ответить
          • Ну, если в базовом классе нет конструктора по умолчанию, то не скомпилируется.
            Ответить
            • Хотя.. если использовать aggregate initialization, то можно и скомпилировать
              Ответить
      • с чего бы ради конструктор по умолчанию будет приватным?
        Ответить
        • По воле программиста. Он может написать "private: OperaCredits();".
          Ответить
          • для этого ж придумали = delete;
            Ответить
            • А вдруг его надо вызывать, но только из своего статика?
              Ответить
              • тогда вариантов нет. А в общем случае я не очень-то хочу писать private: T(); public:, но люблю, когда "большая пятерка" и другие конструкторы определены первыми, если определены
                Ответить
    • А на гитхабе уже прикрыли лавочку. Надеюсь, код Presto там выложат публично после данного инцидента.
      Ответить
      • После какого инцидента?
        Ответить
        • Прикрытия лавочки. Или утечки сырцов.
          Что произошло-то?
          Ответить
        • Сырцы престовой оперы выложили на гитхаб.

          https://github.com/prestocore/browser
          Ответить
          • Но в Гитхабе они уже накрылись медным тазом DMCA, а в Битбакете до сих пор доступны:

            https://bitbucket.org/prestocore-fan/presto

            P.S. В Битбакете добавили несколько полезных ссылок:
            https://boards.4chan.org/g/thread/58469437/well
            https://www.reddit.com/r/operabrowser/comments/5nk69m/presto_engine_source_code_available_on_github/
            https://notabug.org/141243/presto
            https://github.com/PrestoXen/openopera-patches
            Ответить
            • Да, но официально их не попользуешь даже для opensource. Лицензия, все дела.

              Вот я и задумался, может они перелицензируют код.
              Ответить
              • Ага, с этими исходниками на руках чувствуешь себя грабителем банка: не можешь ничего потратить, потому что номера купюр переписаны.
                Ответить
              • Кстати, о перелицензировании. Напомню два инцидента:

                1. После утечки исходников Gecko (нового ядра Нетскейпа) появились опенсорсные веб-браузеры Mozilla Suite, Firefox, Seamonkey и ещё целая куча веб-браузеров и другого софта на этом ядре.

                2. После утечки части исходников Windows 2000 и Windows NT4 (лет 10 назад блуждали по P2P-сетям два архива по 200 мегабайт каждый)... не появилось ничего. Разработчики Wine и ReactOS по-прежнему вынуждены писать код «своими словами», потому что Микрософт не хочет менять лицензию на утёкший код.
                Ответить
                • ReactOS не нужен
                  Ответить
                • Netscape -- умер с концами. А в Windows 10 и поныне может использоваться код из NT4 или оно уже научилось создавать папку с именем PRN?
                  Ответить
                  • Создал в Висте папку PRN, проверь.

                    Кстати, умер с концами Netscape 4.x. А код из Gecko живёт в фуррифоксах и в опенофисах.
                    Ответить
                  • > PRN
                    Мизулина запретила?
                    Ответить
                    • Накачал порнухи на работе, и хотел её в папку сложить для удобства

                      >> copy * PRN

                      А у тебя принтер сетевой подключен, и стоит он в кабинете директора..
                      Ответить
                      • @Накачал порнухи на работе, и хотел её в папку сложить для удобства
                        >> copy * PRN
                        А у тебя принтер сетевой подключен, и стоит он в кабинете директора..

                        А что. Мой шеф за это похвалил бы.
                        Ответить
                  • Коду под NT4 не нужна папка PRN, проверь.
                    API винды для печатанья был релизован через GDI (ну, во всяком случае начиная с Win2k).
                    И с Win7 там еще есть API для XPS.

                    Напрямую писать PRN (который был алиасом LPT) нужно было только в досовых приложениях.
                    Ответить
                    • Ты жопой читаешь? Вопрос был, цитирую:
                      >или оно уже научилось создавать папку с именем PRN
                      Ответить
                      • Процитировал тебе, проверь.
                        Ответить
                      • И Виста, и Семёрка, и Восьмёрка могут создавать папку с именем, совпадающим с досовским устройством.

                        Создал ещё раз, проверь:
                        http://i.imgur.com/2HC6AbA.png

                        Вся эта магия (CON, AUX, PRN, COM1, LPT1) существует только в NTVDM (virtual DOS machine), а за пределами досовской машины это обычные имена файлов.
                        Ответить
                        • Кстати, Fat32 может даже "." и ".."
                          Ответить
                          • Жду доказательств.

                            . и .. в FAT32 уже существуют во всех директориях (а в FAT16 и в FAT12 — во всех, кроме корневой) и что-нибудь с ними сделать нельзя, потому что это ссылки на текущий каталог и на каталог более верхнего уровня соответственно.
                            Ответить
                            • думаю что фату пофиг
                              ничто не мешает тебе взять тулзу для пряого редактирования диска (HxD, например) и создать запись о файле и назвать его точкой

                              а вот винда потом сломается об это
                              Ответить
                              • Можно сделать и зацикленную директорию, подредактировав ссылки на кластеры (чтобы заходить вглубь или выходить по .. можно было бесконечно). Но зачем?
                                Ответить
                            • @Жду доказательств.
                              mkdir \\?\G:\.
                              mkdir \\?\G:\..
                              mkdir \\?\G:\...
                              mkdir \\?\G:\....
                              G:\ - диск с fat32.
                              А знаешь ли ты, Инканус, что у меня на подоконнике лучок растёт? Уже перья пустил.
                              Ответить
                              • не перья, а стрелы

                                чувак, откуда у тебя Fat32 диск с буквой G: в 2017м году? Скажи мне что это флешка
                                Ответить
                                • > Fat32 диск с буквой G: в 2017м году
                                  Законом же не запрещено.
                                  Ответить
                                  • нет, просто я не понимаю смысла совершенно

                                    Фат нужен только для того, чтбы иметь к нему доступ из других ОС.
                                    Ответить
                        • А теперь то же самое, но без \\.\
                          Фароеб хуже пидараса, кстати.
                          Ответить
                          • Ты жопой читаешь? Где тут \\.\, guest? Подпапки с запрошенными именами созданы в папке C:\0.
                            Ответить
                            • Расскажи как создавал.
                              Ответить
                              • F7 в ФАРе.

                                MD из сосноли, а также Проводник почему-то запрещают создавать папки с такими именами. Судя по тому, что ФАР ничего, кроме стандартного Windows API, не использует, это ограничение в Проводнике искусственное. Типа защиты от «чайника».
                                Ответить
                                • os.mkdir() в питоне тоже не делает. Тут тоже защита?
                                  Ответить
                                • @MD из сосноли, а также Проводник почему-то запрещают создавать папки с такими именами. Судя по тому, что ФАР ничего, кроме стандартного Windows API, не использует, это ограничение в Проводнике искусственное.

                                  Это облом именно на уровне WinAPI. Стандартная ошибка.
                                  Ответить
                                  • Винапи разное бывает, стертушёк.
                                    Ответить
                                    • @Винапи разное бывает, стертушёк.

                                      Отхватил минус? Завтра в школу с родителями.
                                      Ответить
                            • Извиняйся, петушок. http://govnokod.ru/22010#comment367477
                              Ответить
                              • Сема рамкукарекался чото. Чем вы его обидели? Послали ман читать? В очередной раз тыкнули его в его ламерство?
                                Ответить
                                • Это сёма кой-кого в его ламерство ткнул.
                                  Ответить
                                  • Сёма не разбирается ни в чем, а следовательно не может тыкнуть никого ни во что
                                    Ответить
                                    • Справедливости ради замечу, что в данном случае я обнаружил пробел в своих знаниях. Я как-то и не заметил, что в Винде до сих пор приходится дописывать \\.\, чтобы создать директорию с именем PRN. Так что в меня ткнули справедливо.
                                      Ответить
                                    • В твою мамку же тыкнул.
                                      Ответить
                                • петушёк
                                  Ответить
                          • @Фароеб хуже пидараса, кстати.

                            Хуже консолечника. Я никогда бы не подумал, что наш милый Инканус - такой жуткий извращенец.
                            Ответить
                            • консоль это круто
                              за консолью будущее

                              MS это понял, и придумал PowerShell
                              Ответить
                            • Переход на ФАР был вынужденным: Дос Навигатор не поддерживает Unicode, а переписывать 100500 строк кода только ради поддержки Unicode мне лень.
                              Ответить
                              • а ты прямо в фаре программишь? F4 и вперед?

                                На каком ЯП, если не секрет?
                                Ответить
                        • А вот если ты сделаешь "mkdir CON" то обламаешься.

                          Потому что если обращаться через объект с именем диска (C:\) то не сработает, а если обращаться через \\.\C:\ (видимо так делает фар) то сработает

                          Там, поди, редиректор сидит для всяких древних .BAT файлов (запись в PRN могла вызвать реальное печатанье) и на C:\ он реагирует, а на \\.\ -- нет, потому что "менеджер объектов" с его \\.\. завезли только в NT: в досе его не было


                          >>существует только в NTVDM
                          слава богу у меня давно уже x64, там его нет
                          Ответить
                          • Проверил на таком коде:
                            #include <stdio.h>
                            
                            int main() {
                              mkdir("PRN");
                              return 0;
                            }


                            Обламывается. А mkdir("\\\\.\\C:\\PRN") работает.

                            Признаю свою ошибку. Действительно, ФАР хитрый.
                            Ответить
                            • можно было и без сей: "mkdir \\.\\C:\PRN" должно сработать.

                              >>Действительно, ФАР хитрый.
                              В этом месте нужно взять procmon и посмотреть какие именно сисколы с какими параметрами идут от фара, но лень же

                              ps: еще Logger есть в Debugging tools для этого же
                              Ответить
                              • Подтверждаю. Спасибо.

                                Что-то я обленился с проверками...
                                Ответить
                              • Лазерный принтер в 20-м кабинете печатает полосками, проверь.
                                Ответить
                                • > печатает полосками
                                  Оставь в покое шредер. Принтер на соседнем столе, проверь.
                                  Ответить
                                  • Шредер не работает с тех пор как туда кота засунули. Проверено.
                                    Ответить
                                • в кабинете? это ты свою комнату так называешь?
                                  Ответить
                            • http://govnokod.ru/22010#comment367472
                              Ответить
            • P.S. Ссылка на gstreamer (на gstreamer.freedesktop.org более новая версия, которая без патча с Оперой не соберётся, а на sourcecode.opera.com/gstreamer исходники неполные — отсутствуют плагины):

              http://www22.zippyshare.com/v/Wp1PrPRW/file.html
              Ответить
            • Так это утечка или что?
              Ответить
              • Ссылка есть. Из исходников собирается не паровоз, а десктопная Опера 12.15 (полностью, со шкурками и вспомогательными файлами) даже без обработки напильником (в Linux и в Windows подтверждено; на Маке, кажется, ещё никто не пробовал). Opera Software подала жалобу на первый репозиторий (Гитхаб).

                Что это может быть?
                Ответить
                • Одному из разрабов стало жалко, что весь код старой оперы уйдёт на помойку. Вот и выложил, наверное.
                  Ответить
                  • Почему именно десктопная, а не Mobile, Smart TV, Wii, Nintendo? Причём конкретный десктопный комплект для сборки без лишних частей и без недостающих (нужно только добавить libcurl и одну директорию от openssl для того, чтобы собрался диспетчер обновлений).
                    Ответить

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