39
39
#include <eval_context.h>
40
40
#include <changes_chroot.h> /* RecordPkgOperationInChroot() */
41
41
#include <simulate_mode.h> /* CHROOT_PKG_OPERATION_* */
42
+ #include <csv_writer.h> /* safely write csv entries */
42
43
43
44
#define INVENTORY_LIST_BUFFER_SIZE 100 * 80 /* 100 entries with 80 characters
44
45
* per line */
@@ -658,7 +659,8 @@ int UpdatePackagesDB(Rlist *data, const char *pm_name, UpdateType type)
658
659
{
659
660
CleanDB (db_cached );
660
661
661
- Buffer * inventory_data = BufferNewWithCapacity (INVENTORY_LIST_BUFFER_SIZE );
662
+ Writer * idw = StringWriter ();
663
+ CsvWriter * idcw = CsvWriterOpen (idw );
662
664
663
665
const char * package_data [3 ] = {NULL , NULL , NULL };
664
666
@@ -676,9 +678,10 @@ int UpdatePackagesDB(Rlist *data, const char *pm_name, UpdateType type)
676
678
package_data [1 ], package_data [2 ],
677
679
type );
678
680
679
- BufferAppendF (inventory_data , "%s,%s,%s\n" ,
680
- package_data [0 ], package_data [1 ],
681
- package_data [2 ]);
681
+ CsvWriterField (idcw , package_data [0 ]);
682
+ CsvWriterField (idcw , package_data [1 ]);
683
+ CsvWriterField (idcw , package_data [2 ]);
684
+ CsvWriterNewRecord (idcw );
682
685
}
683
686
else
684
687
{
@@ -726,8 +729,10 @@ int UpdatePackagesDB(Rlist *data, const char *pm_name, UpdateType type)
726
729
WritePackageDataToDB (db_cached , package_data [0 ],
727
730
package_data [1 ], package_data [2 ], type );
728
731
729
- BufferAppendF (inventory_data , "%s,%s,%s\n" , package_data [0 ],
730
- package_data [1 ], package_data [2 ]);
732
+ CsvWriterField (idcw , package_data [0 ]);
733
+ CsvWriterField (idcw , package_data [1 ]);
734
+ CsvWriterField (idcw , package_data [2 ]);
735
+ CsvWriterNewRecord (idcw );
731
736
}
732
737
else if (package_data [0 ] || package_data [1 ] || package_data [2 ])
733
738
{
@@ -739,7 +744,14 @@ int UpdatePackagesDB(Rlist *data, const char *pm_name, UpdateType type)
739
744
}
740
745
741
746
char * inventory_key = "<inventory>" ;
742
- char * inventory_list = BufferClose (inventory_data );
747
+ CsvWriterClose (idcw );
748
+ char * inventory_list = StringWriterClose (idw );
749
+
750
+ // Legacy: the lines are expected to be separated by newlines, not CRLF
751
+ const size_t buf_size = strlen (inventory_list );
752
+ NDEBUG_UNUSED const ssize_t num_repl =
753
+ StringReplace (inventory_list , buf_size , "\r\n" , "\n" );
754
+ assert (num_repl >= 0 );
743
755
744
756
/* We can have empty list of installed software or available updates. */
745
757
if (inventory_list == NULL )
0 commit comments