From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684391995; x=1686983995; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=+Vp6pl0bR4RIIhNhlvkaHl5ayLizR7REcHopo+lwUSg=; b=mJYXuq8Uk6q/Ohs55cfNIzBK7buC8k6/MAVt+XwboZXsmt4e1zRlaVGXisPpYTEHfg XFuM25pHs5Vk34vp0TeDUWk0Kp2do8ijkVSsfpkKEl+tHOfgLLzx58L1Ln1k/Bj9ry+A i/Con26PD8if9rZyO2HRQXGBQqMsK+8cm3gu7BYCSoGkAgAsRDPnomzttptUvApriPcU 7paKgxMgxRjr+/Z7EYbxo010tL3/P0aZKLq06+FA9rfys0TyuQpZgp5Tyn1bexnqkcj1 sKai18kESn/vje5suPGH4/1+0LMbSwthBxrECC8P4lV6ZicFY8QqL+CZFp3lv7y8fXgE ilQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684391995; x=1686983995; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=+Vp6pl0bR4RIIhNhlvkaHl5ayLizR7REcHopo+lwUSg=; b=duEdUuzVKfppC5YIN4j2KgBb2ulm6k0Wce77A0WnL2njoi0c6LihRLeTBEy9NRTZzZ xfQOWw2lJvt6sRJeTVwuPNn9q9RQxC+VQP9qvITW5Js5KiyHuez51716sSuA8Lip9yqe p5kYUdHMAwSeoQlvleRwqVmUpXXIqEH/ST/PQC7ydsVyKbWVzTu93Xv4B8Hz5lEuVze1 xYiXoPLOE8fHexEoQXpA0g8epp0JUyHMXdVcTQ8I5QXthQDl2x8y/YhAK6Aix8UQmkRK qZLhYcGL9dcHdssIRu2UIDtipKaxZ8WzZb3Vs5mfpcPL3jplMgQqyIFAx1mFjz5BoGq6 H1IA== X-Gm-Message-State: AC+VfDxHSmJuwinJJpFCjiXtxDs31banZYs92Rnk7XcS3g7WkYVwtq// iYmPKscABxUEvDgL5pDAA8hhmMG/6zs= X-Google-Smtp-Source: ACHHUZ48V+0IbZGvfpghyAzerT09G3a6Vv0Ng8AR2CTanlNlV035XKnvgSd0ZubFtWJuMFUJDQcaHQ== X-Received: by 2002:ac2:4836:0:b0:4ed:b4f9:28c7 with SMTP id 22-20020ac24836000000b004edb4f928c7mr882659lft.6.1684391994962; Wed, 17 May 2023 23:39:54 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------N83JXQrtkoX6BHr9JllsTdCE" Message-ID: Date: Thu, 18 May 2023 09:39:53 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.11.0 From: Leonid Krivoshein To: make-initrd@lists.altlinux.org References: <6b444ed922286eb3df8f5322b1bddf9c55753eb8.1683200226.git.gladkov.alexey@gmail.com> <513c7d37-9296-118a-7552-0a08adcc6444@gmail.com> Content-Language: ru, en-US In-Reply-To: <513c7d37-9296-118a-7552-0a08adcc6444@gmail.com> Subject: Re: [make-initrd] [PATCH 1/3] Reimplement ueventd X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 May 2023 06:39:58 -0000 Archived-At: List-Archive: This is a multi-part message in MIME format. --------------N83JXQrtkoX6BHr9JllsTdCE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Ой, второй раз уже кнопкой промахиваюсь. (( On 5/18/23 08:16, Leonid Krivoshein wrote: > Привет! > > > On 5/15/23 13:43, Alexey Gladkov wrote: >> [...] >>>> +    pid_t pid = vfork(); >>>> + >>>> +    if (pid < 0) { >>>> +        err("fork: %m"); >>>> + >>>> +    } else if (!pid) { >>>> +        execve(argv[0], argv, environ); >>> Компилятор не ругается здесь только потому, что подключен >>> через "ueventd.h", а ругаться у него целых два повода (execve и >>> environ). >> Если ты предполагаешь, что тут должна быть ругань про отсутствие >> определения execve и environ, то ты ошибаешься. Ругани тут нет так как >> определения приезжают через ueventd.h. >> >> Или ты про какие поводы для ругани ? > > Так я и написал, что ругани нет только потому, что подключен . > > >>> Это я к тому, что в твоём заголовочном файле он подключен для >>> logging.c, а не для queue-processor.c. Согласно man 7 environ можно не >>> объявлять эту переменную в коде, если подключается с >>> _GNU_SOURCE, т.е. как раз твой случай. >> Что значит подключён для logging.c ? unistd.h просто подключён в >> ueventd.h. > > А это было сказано вот к чему: > >> > Обычно они все выносятся наверх, потому и заголовочные. > Такой >> подход убережёт от понимания ошибок компилятора при появлении в > >> дальнейшем конфликтов в именах между твоим и библиотечным кодом. > >> Я так делаю чисто для удобства чтобы понимать, что include не нужен >> определениям выше. Когда портянка include собрана сверху, то не всегда >> ясно для чего include добавлен. Но для меня это совершенно не критично. > > > Получается, что упоминается дважды, а только > один раз и не для queue-processor.c. Как бы там ни было, это необычно > читать. Обычно рядом с заголовочным файлом пишут, для чего его > подключают. И если речь о подключении в твоём заголовочном файле, то > вот эти все стандартные нужны только при совместном использовании > типов, иначе их лучше подключать не в заголовочном файле. > > >> Весь этот код компилируется с глобальным _GNU_SOURCE. >> >>>> +        fatal("exec: %s: %m", argv[0]); >>>> +    } else { >>>> +        int status = 0; >>>> + >>>> +        if (waitpid_retry(pid, &status, 0) != pid || >>>> !WIFEXITED(status)) >>>> +            info("%s: session=%lu: %s failed", >>>> +                 queue->q_name, session, handler_file); >>> Насчёт "session=%lu..." только лишь глядя в этот код понял, что и сам в >>> не публичном коде опрометчиво использую uint64_t с таким >>> форматированием, хотя везде по коду должно быть "session=" PRIu64 >>> "...". >>> Нужно подключить заголовочный файл либо использовать >>> какое-то приведение типов. Пренебречь этим, как сейчас, можно только >>> полагаясь на конкретные платформы. >> Я знаю про PRIu64, но его использование не понимает clang и >> получается вот >> так: >> >> datasrc/ueventd/queue-processor.c:40:27: warning: format specifies >> type 'char *' but the argument has type 'uint64_t' (aka 'unsigned >> long') [-Wformat] >>                                  queue->q_name, session, handler_file); >>                                                 ^~~~~~~ >> datasrc/ueventd/ueventd.h:70:69: note: expanded from macro 'rd_info' >> #define rd_info(format, arg...) rd_log_message(LOG_INFO, format, ##arg) >> ~~~~~~    ^~~ >> datasrc/ueventd/queue-processor.c:40:36: warning: data argument not >> used by format string [-Wformat-extra-args] >>                                  queue->q_name, session, handler_file); >> ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ >> datasrc/ueventd/ueventd.h:70:69: note: expanded from macro 'rd_info' >> #define rd_info(format, arg...) rd_log_message(LOG_INFO, format, ##arg) >> ~~~~~~    ^ >> 2 warnings generated. >> >> то есть как видишь у clang PRIu64 превратилось в пустую строку и >> аргументы >> съехали. >> >> Таким образом использование PRIu64 сразу делает код gcc-specific. > > Предполагаю, что дело в отсутствии определения: > > #ifndef __STDC_FORMAT_MACROS > #define __STDC_FORMAT_MACROS 1 > #endif > > #include > > поскольку эти PR... определения конфликтуют с чем-то из c11. > Так и есть. Вложил пример, который проверил с clang-15, работает... -- WBR, Leonid Krivoshein. --------------N83JXQrtkoX6BHr9JllsTdCE Content-Type: text/x-csrc; charset=UTF-8; name="uint64.c" Content-Disposition: attachment; filename="uint64.c" Content-Transfer-Encoding: base64 I2RlZmluZSBfR05VX1NPVVJDRQoKI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwojZGVm aW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKI2VuZGlmCgojaW5jbHVkZSA8aW50dHlwZXMu aD4KI2luY2x1ZGUgPHN0ZGlvLmg+CgoKaW50IG1haW4oKSB7Cgl1aW50NjRfdCB2ID0gVUlO VDY0X0MoMTIzNDUpOwoKCXByaW50ZigiVmFsdWUgaXM6ICUiIFBSSXU2NCAiXG4iLCB2KTsK CglyZXR1cm4gMDsKfQo= --------------N83JXQrtkoX6BHr9JllsTdCE--