Bug 5662

Summary: Дублирование куска спека в выводе rpm -bE
Product: Sisyphus Reporter: Kirill A. Shutemov <kas>
Component: librpmbuildAssignee: 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 Flags
Патчик, который исправляет проблемму
none
Теперь используется ftruncate none

Description Kirill A. Shutemov 2004-12-09 17:40:45 MSK
Если в спеке присутствует тэг BuildArch то в выводе rpm -bE дублируется кусок
спека находящийся до этого тэга. Пример спека:
Name: test
Version: test
Release: test
Summary: test
License: GPL
Group: test
BuildArch: noarch
%description
Comment 1 Dmitry V. Levin 2004-12-09 17:54:49 MSK
It's a known story.
Comment 2 Dmitry V. Levin 2004-12-09 17:56:28 MSK
*** Bug 5573 has been marked as a duplicate of this bug. ***
Comment 3 Kirill A. Shutemov 2004-12-10 16:13:54 MSK
Created attachment 664 [details]
Патчик, который исправляет проблемму
Comment 4 Kirill A. Shutemov 2004-12-10 16:19:47 MSK
блин, орфографическая ошибка в патче - s/tempory/temporary/
Comment 5 Kirill A. Shutemov 2004-12-10 16:21:54 MSK
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;
> }
Comment 6 Dmitry V. Levin 2004-12-14 13:17:36 MSK
Ввиду повышенной активности reporter'а.
Comment 7 Dmitry V. Levin 2004-12-14 13:20:22 MSK
1. в таких случаях необъодимо использовать ftruncate(2).
2. в rpmlib работа с временными файлами отличается от обычной.
Comment 8 Kirill A. Shutemov 2004-12-14 13:59:16 MSK
(In reply to comment #7)
> 1. в таких случаях необъодимо использовать ftruncate(2).
ok
> 2. в rpmlib работа с временными файлами отличается от обычной.
Вы имеете ввиду использование makeTempFile?
Comment 9 Kirill A. Shutemov 2004-12-15 15:13:50 MSK
Created attachment 671 [details]
Теперь используется ftruncate

А по поводу использования временных файлов в rpmlib - прошу разъяснить
по-подробней...
Comment 10 Slava Semushin 2007-06-04 14:16:01 MSD
Эта бага до сих пор актуальна? (сегодня вечером проверю дома)

И, думаю, что это не major, а normal.
Comment 11 Kirill A. Shutemov 2007-06-04 14:37:25 MSD
Воспроизводиться, но для мня не актуальна.
Comment 12 at@altlinux.org 2008-06-14 21:40:27 MSD
Fixed in 4.0.4-alt77.M40.1-39-g63d7ecd