Summary: | Дублирование куска спека в выводе rpm -bE | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Kirill A. Shutemov <kas> | ||||||
Component: | librpmbuild | Assignee: | placeholder <placeholder> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | normal | ||||||||
Priority: | P4 | CC: | arseny, evseev, glebfm, imz, ldv, legion, php-coder, placeholder, vt | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Description
Kirill A. Shutemov
2004-12-09 17:40:45 MSK
It's a known story. *** Bug 5573 has been marked as a duplicate of this bug. *** Created attachment 664 [details]
Патчик, который исправляет проблемму
блин, орфографическая ошибка в патче - s/tempory/temporary/ Comment on attachment 664 [details] Патчик, который исправляет проблемму >--- rpm-4_0-4.0.4-orig/build/parseSpec.c 2002-03-26 01:09:32 +0200 >+++ rpm-4_0-4.0.4/build/parseSpec.c 2004-12-10 15:13:44 +0200 >@@ -16,6 +16,8 @@ > > /*@access FD_t @*/ /* compared with NULL */ > >+static FILE* temp_file;/*temporary file to output preprocessing spec*/ >+ > /** > */ > /*@unchecked@*/ >@@ -362,7 +364,7 @@ > > if ( '\n' == chomped[len-1] ) > chomped[len-1] = '\0'; >- puts( chomped ); >+ fprintf(temp_file, "%s\n", chomped ); > chomped = _free( chomped ); > } > >@@ -396,6 +398,10 @@ > { > rpmParseState parsePart = PART_PREAMBLE; > int initialPackage = 1; >+ char temp_filename_pattern[25]="preprocessed-spec.XXXXXX"; >+ int temp_fd; >+ char line[255]; >+ > #ifdef DYING > const char *saveArch; > #endif >@@ -416,6 +422,23 @@ > spec->fileStack = newOpenFileInfo(); > spec->fileStack->fileName = xstrdup(spec->specFile); > spec->preprocess_mode = preprocess; >+ >+ if (spec->preprocess_mode){ >+ temp_fd = mkstemp(temp_filename_pattern); >+ if (temp_fd == -1) { >+ rpmError(RPMERR_CREATE, _("Cannot open temporary file")); >+ return RPMERR_CREATE; >+ } >+ if (!(temp_file = fdopen(temp_fd, "w+b"))) { >+ rpmError(RPMERR_CREATE, _("Cannot create temporary file descriptor")); >+ return RPMERR_CREATE; >+ } >+ if (unlink(temp_filename_pattern) == -1) { >+ rpmError(RPMERR_UNLINK, _("Cannot delete temporary file")); >+ return RPMERR_UNLINK; >+ } >+ } >+ > if (buildRootURL) { > const char * buildRoot; > (void) urlPath(buildRootURL, &buildRoot); >@@ -636,5 +659,15 @@ > closeSpec(spec); > *specp = spec; > >+ if (spec->preprocess_mode){ >+ if (!fseek(temp_file,0,SEEK_SET)) >+ while(fgets(line,255,temp_file)) >+ printf("%s",line); >+ else{ >+ rpmError(RPMERR_FSEEK, _("Cannot seek temporary file")); >+ return RPMERR_FSEEK; >+ } >+ } >+ > return 0; > } Ввиду повышенной активности reporter'а. 1. в таких случаях необъодимо использовать ftruncate(2). 2. в rpmlib работа с временными файлами отличается от обычной. (In reply to comment #7) > 1. в таких случаях необъодимо использовать ftruncate(2). ok > 2. в rpmlib работа с временными файлами отличается от обычной. Вы имеете ввиду использование makeTempFile? Created attachment 671 [details]
Теперь используется ftruncate
А по поводу использования временных файлов в rpmlib - прошу разъяснить
по-подробней...
Эта бага до сих пор актуальна? (сегодня вечером проверю дома) И, думаю, что это не major, а normal. Воспроизводиться, но для мня не актуальна. Fixed in 4.0.4-alt77.M40.1-39-g63d7ecd |