LINUX.ORG.RU

mozilla-nss: ошибка при сборке. fwrite

 


0

2

Привет, друзья. У меня возникла необходимость компильнуть последний Firefox под SLES 11 и openSUSE 11.4 Evergreen. Я создал OBS-репозиторий, скопировал туда Firefox, он в свою очередь попросил mozilla-nspr и mozilla-nss последних версий. Я скопировал и их тоже. И вот что получилось с mozilla-nss 3.33:

cc -o Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/utilmod.o -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fPIC  -m64 -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -DLINUX -Dlinux -Wall -Werror -DXP_UNIX -UDEBUG -DNDEBUG -D_REENTRANT -DNSS_NO_INIT_SUPPORT -DUSE_UTIL_DIRECTLY -DNO_NSPR_10_SUPPORT -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -I/usr/include/nspr4 -I../../../dist/Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/include -I../../../dist/public/nss -I../../../dist/private/nss  utilmod.c
utilmod.c: In function 'nssutil_AddSecmodDBEntry':
utilmod.c:704:15: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
         fwrite(block, PORT_Strlen(block), 1, fd);
               ^
utilmod.c: In function 'nssutil_DeleteSecmodDBEntry':
utilmod.c:590:19: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
             fwrite(block, PORT_Strlen(block), 1, fd2);
                   ^
cc1: all warnings being treated as errors
make[2]: *** [Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/utilmod.o] Error 1
make[2]: Leaving directory `/usr/src/packages/BUILD/nss-3.33/nss/lib/util'
make[1]: *** [libs] Error 2

Я запостил баг-репорт, но там уже месяц - тишина. Помогите поправить код?

★★★★★

Последнее исправление: ZenitharChampion (всего исправлений: 1)

Нельзя при сборке передать -Wno-unused-result?

Если в коде править, то можно перед вызовами просто дописать (void). Можно, конечно, обрабатывать нормально, но это надо код смотреть и он должен уметь учитывать ошибки в каком-то виде.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Я указал:

export CFLAGS="$CFLAGS -Wno-unused-result"
export CXXFLAGS="$CFLAGS"

Не подхватилось. Наверное, потому что не было configure, а был сразу make.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion
-fwrite(block, PORT_Strlen(block), 1, fd);
+int ignoreMe = fwrite(block, PORT_Strlen(block), 1, fd);
+(void)ignoreMe;

-fwrite(block, PORT_Strlen(block), 1, fd2);
+int ignoreMe2 = fwrite(block, PORT_Strlen(block), 1, fd2);
+(void)ignoreMe2;
fluorite ★★★★★
()

бог дал им божественный С и stdio, а они продолжают писать так, что браузер глючит и падает, игнорируя коды возврата

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от fluorite

Теперь такая ошибка:

cc -o Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/h_page.o -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fPIC  -m64 -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -DLINUX -Dlinux -Wall -Werror -DXP_UNIX -UDEBUG -DNDEBUG -D_REENTRANT -DNSS_NO_INIT_SUPPORT -DUSE_UTIL_DIRECTLY -DNO_NSPR_10_SUPPORT -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -DSTDC_HEADERS -DHAVE_STRERROR -DHAVE_SNPRINTF -DMEMMOVE -D__DBINTERFACE_PRIVATE -I/usr/include/nspr4 -I../../../../dist/Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/include -I../../../../dist/public/dbm -I../../../../dist/private/dbm  h_page.c
h_page.c: In function 'overflow_page':
h_page.c:969:13: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
             (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
             ^
h_page.c:984:13: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
             (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
             ^
h_page.c:1010:17: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
                 (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
                 ^
cc1: all warnings being treated as errors
make[3]: *** [Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/h_page.o] Error 1
make[3]: Leaving directory `/usr/src/packages/BUILD/nss-3.33/nss/lib/dbm/src'
ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

Я сделал вот так, и сборка на этом моменте «проскочила». Я решил что если эти кусочки кода повторяются, то надо сделать ignoreMe во всех трёх местах. А не ignoreMe, ignoreMe2 и ignoreMe3. Правильно сделал?

--- a/lib/dbm/src/h_page.c	2017-09-20 06:47:27.000000000 +0100
+++ b/lib/dbm/src/h_page.c	2017-11-09 07:00:28.000000000 +0100
@@ -966,7 +966,8 @@
     if (offset > SPLITMASK) {
         if (++splitnum >= NCACHED) {
 #ifndef macintosh
-            (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            int ignoreMe = fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            (void)ignoreMe;
 #endif
             return (0);
         }
@@ -981,7 +982,8 @@
         free_page++;
         if (free_page >= NCACHED) {
 #ifndef macintosh
-            (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            int ignoreMe = fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            (void)ignoreMe;
 #endif
             return (0);
         }
@@ -1007,7 +1009,8 @@
         if (offset > SPLITMASK) {
             if (++splitnum >= NCACHED) {
 #ifndef macintosh
-                (void)fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            int ignoreMe = fwrite(OVMSG, 1, sizeof(OVMSG) - 1, stderr);
+            (void)ignoreMe;
 #endif
                 return (0);
             }
ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от fluorite

Патч пока такой. http://paste.org.ru/?j7hbz4 Я застопорился на нешаблонном моменте.

cd crlutil; make libs
make[2]: Entering directory `/usr/src/packages/BUILD/nss-3.33/nss/cmd/crlutil'
cc -o Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/crlgen_lex.o -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fPIC  -m64 -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -DLINUX -Dlinux -Wall -Werror -DXP_UNIX -DNSPR20 -UDEBUG -DNDEBUG -D_REENTRANT -DNSS_NO_INIT_SUPPORT -DUSE_UTIL_DIRECTLY -DNO_NSPR_10_SUPPORT -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -I/usr/include/nspr4 -I../../../dist/Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/include -I../../../dist/public/nss  -I../../../dist/private/nss  -I../../../dist/public/seccmd -I../../../dist/public/dbm  crlgen_lex.c
crlgen_lex_orig.l: In function 'yylex':
crlgen_lex_orig.l:96:14: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
         return parserStatus;
              ^
crlgen_lex_orig.l:144:17: note: in expansion of macro 'ECHO'
             parserData->parsedLineNum, yytext);
                 ^
cc1: all warnings being treated as errors
make[2]: *** [Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/crlgen_lex.o] Error 1
make[2]: Leaving directory `/usr/src/packages/BUILD/nss-3.33/nss/cmd/crlutil'

В файле «crlgen_lex_orig.l» слова fwrite нет. Есть в «crlgen_lex.с»

#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO (void)fwrite(yytext, yyleng, 1, yyout)
#endif
ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от fluorite

Спасибо. У меня тут опять нешаблонный случай, запосщу чуть позже - устал.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Файл nss/cmd/httpserv/httpserv.c, код:

            if (reqLen > 0) {
                if (verbose > 1)
                    fwrite(buf, 1, reqLen, stdout); /* display it */

                iovs[numIOVs].iov_base = buf;
                iovs[numIOVs].iov_len = reqLen;
                numIOVs++;
            }

Пропатчил по шаблону:

--- a/cmd/httpserv/httpserv.c	2017-09-20 06:47:27.000000000 +0100
+++ b/cmd/httpserv/httpserv.c	2017-11-09 09:28:29.000000000 +0100
@@ -834,7 +834,8 @@
 
             if (reqLen > 0) {
                 if (verbose > 1)
-                    fwrite(buf, 1, reqLen, stdout); /* display it */
+                    int ignoreMe = fwrite(buf, 1, reqLen, stdout); /* display it */
+                    (void)ignoreMe;
 
                 iovs[numIOVs].iov_base = buf;
                 iovs[numIOVs].iov_len = reqLen;

Получил такое:

cc -o Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/httpserv.o -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fPIC  -m64 -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -DLINUX -Dlinux -Wall -Werror -DXP_UNIX -DNSPR20 -UDEBUG -DNDEBUG -D_REENTRANT -DNSS_NO_INIT_SUPPORT -DUSE_UTIL_DIRECTLY -DNO_NSPR_10_SUPPORT -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -I/usr/include/nspr4 -I../../../dist/Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/include -I../../../dist/public/nss -I../../../dist/private/nss -I../../../dist/public/seccmd -I../../../dist/public/dbm  httpserv.c
httpserv.c: In function 'handle_connection':
httpserv.c:837:21: error: expected expression before 'int'
                     int ignoreMe = fwrite(buf, 1, reqLen, stdout); /* display it */
                     ^
httpserv.c:838:27: error: 'ignoreMe' undeclared (first use in this function)
                     (void)ignoreMe;
                           ^
httpserv.c:838:27: note: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/httpserv.o] Error 1
make[2]: Leaving directory `/usr/src/packages/BUILD/nss-3.33/nss/cmd/httpserv'
ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Вот без последнего патча:

cc -o Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/httpserv.o -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fPIC  -m64 -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -DLINUX -Dlinux -Wall -Werror -DXP_UNIX -DNSPR20 -UDEBUG -DNDEBUG -D_REENTRANT -DNSS_NO_INIT_SUPPORT -DUSE_UTIL_DIRECTLY -DNO_NSPR_10_SUPPORT -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -I/usr/include/nspr4 -I../../../dist/Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/include -I../../../dist/public/nss -I../../../dist/private/nss -I../../../dist/public/seccmd -I../../../dist/public/dbm  httpserv.c
httpserv.c: In function 'handle_connection':
httpserv.c:837:27: error: ignoring return value of 'fwrite', declared with attribute warn_unused_result [-Werror=unused-result]
                     fwrite(buf, 1, reqLen, stdout); /* display it */
                           ^
cc1: all warnings being treated as errors
make[2]: *** [Linux4.4_x86_64_cc_glibc_PTH_64_OPT.OBJ/httpserv.o] Error 1
make[2]: Leaving directory `/usr/src/packages/BUILD/nss-3.33/nss/cmd/httpserv'
ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Можно, но не перебьёт ли его -Wall?

В случаях, когда можно нормально задать, оно просто вычетает предупреждение из общего набора.

xaizek ★★★★★
()
Ответ на: комментарий от fluorite

Спасибо, не знал.

2005
RESOLVED FIXED
воспроизводится на текущем master

...

xaizek ★★★★★
()
Ответ на: комментарий от fluorite

Шёл шестнадцатый коммит. А как вот это пропатчить? Вот такие кавычки? {}

    if (encodedCertChain) {
        fprintf(out, "Content-type: application/x-x509-ca-cert\n\n");
        fwrite(encodedCertChain->data, 1, encodedCertChain->len,
               out);
        SECITEM_FreeItem(encodedCertChain, PR_TRUE);
    } else {
        PR_fprintf(errorFD, "%s: Can't DER encode this certificate\n",
                   PROGRAM_NAME);
        errorCount++;
        exit(ERRX);
    }
ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Кажется, понял - просто сделать в одну строку.

ZenitharChampion ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.