+ // Compress the filenames into blocks.
+ vector<string> filename_blocks;
+ string uncompressed_filenames;
+ int num_files_this_block = 0;
+
+ string dst;
+
+ for (string &filename : files) {
+ uncompressed_filenames += filename;
+ filename.clear();
+ if (++num_files_this_block == block_size) {
+ filename_blocks.push_back(zstd_compress(uncompressed_filenames));
+ uncompressed_filenames.clear();
+ num_files_this_block = 0;
+ } else {
+ uncompressed_filenames.push_back('\0');
+ }
+ }
+ if (num_files_this_block > 0) {
+ filename_blocks.push_back(zstd_compress(uncompressed_filenames));
+ }
+ files.clear();
+
+ // Stick an empty block at the end as sentinel.
+ filename_blocks.push_back("");
+