diff --git a/src/bin/package/Jamfile b/src/bin/package/Jamfile index ec5150666c..b015b5f837 100644 --- a/src/bin/package/Jamfile +++ b/src/bin/package/Jamfile @@ -9,6 +9,7 @@ BinCommand package : command_list.cpp package.cpp PackageWriterListener.cpp + PackageWritingUtils.cpp StandardErrorOutput.cpp : diff --git a/src/bin/package/PackageWritingUtils.cpp b/src/bin/package/PackageWritingUtils.cpp new file mode 100644 index 0000000000..da83e349b0 --- /dev/null +++ b/src/bin/package/PackageWritingUtils.cpp @@ -0,0 +1,49 @@ +/* + * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ + + +#include "PackageWritingUtils.h" + +#include +#include +#include +#include + +#include + +#include + + +status_t +add_current_directory_entries(BPackageWriter& packageWriter, + BPackageWriterListener& listener, bool skipPackageInfo) +{ + // open the current directory + DIR* dir = opendir("."); + if (dir == NULL) { + listener.PrintError("Error: Failed to opendir '.': %s\n", + strerror(errno)); + return errno; + } + CObjectDeleter dirCloser(dir, &closedir); + + while (dirent* entry = readdir(dir)) { + // skip "." and ".." + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + // skip the .PackageInfo, if requested + if (skipPackageInfo + && strcmp(entry->d_name, B_HPKG_PACKAGE_INFO_FILE_NAME) == 0) { + continue; + } + + status_t error = packageWriter.AddEntry(entry->d_name); + if (error != B_OK) + return error; + } + + return B_OK; +} diff --git a/src/bin/package/PackageWritingUtils.h b/src/bin/package/PackageWritingUtils.h new file mode 100644 index 0000000000..ba696c9eb8 --- /dev/null +++ b/src/bin/package/PackageWritingUtils.h @@ -0,0 +1,22 @@ +/* + * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ +#ifndef PACKAGE_WRITING_UTILS_H +#define PACKAGE_WRITING_UTILS_H + + +#include + +#include + + +using BPackageKit::BHPKG::BPackageWriter; +using BPackageKit::BHPKG::BPackageWriterListener; + + +status_t add_current_directory_entries(BPackageWriter& packageWriter, + BPackageWriterListener& listener, bool skipPackageInfo); + + +#endif // PACKAGE_WRITING_UTILS_H diff --git a/src/bin/package/command_create.cpp b/src/bin/package/command_create.cpp index 23d7fe97dd..c575a7964a 100644 --- a/src/bin/package/command_create.cpp +++ b/src/bin/package/command_create.cpp @@ -5,7 +5,6 @@ */ -#include #include #include #include @@ -22,6 +21,7 @@ #include "package.h" #include "PackageWriterListener.h" +#include "PackageWritingUtils.h" #include "StandardErrorOutput.h" @@ -109,29 +109,9 @@ command_create(int argc, const char* const* argv) } } - // add all files of current directory - DIR* dir = opendir("."); - if (dir == NULL) { - listener.PrintError("Error: Failed to opendir '.': %s\n", - strerror(errno)); + // add all files of the current directory, save for the .PackageInfo + if (add_current_directory_entries(packageWriter, listener, true) != B_OK) return 1; - } - - while (dirent* entry = readdir(dir)) { - // skip "." and ".." - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; - - // also skip the .PackageInfo -- we'll add it later - if (strcmp(entry->d_name, B_HPKG_PACKAGE_INFO_FILE_NAME) == 0) - continue; - - result = packageWriter.AddEntry(entry->d_name); - if (result != B_OK) - return 1; - } - - closedir(dir); // add the .PackageInfo result = packageWriter.AddEntry(B_HPKG_PACKAGE_INFO_FILE_NAME, diff --git a/src/tools/package/Jamfile b/src/tools/package/Jamfile index 650ad04910..1f08a8d597 100644 --- a/src/tools/package/Jamfile +++ b/src/tools/package/Jamfile @@ -13,6 +13,7 @@ BuildPlatformMain package : command_list.cpp package.cpp PackageWriterListener.cpp + PackageWritingUtils.cpp StandardErrorOutput.cpp :