345 #ifndef LIB_CARDS_INCLUDED 346 #define LIB_CARDS_INCLUDED 355 #include <sys/utsname.h> 364 std::string getMachineType ();
371 #define RED "\033[1;31m" 372 #define GREEN "\033[1;32m" 373 #define YELLOW "\033[1;33m" 374 #define BLUE "\033[1;34m" 375 #define MAGENTA "\033[1;35m" 376 #define CYAN "\033[1;36m" 377 #define WHITE "\033[1;37m" 378 #define NORMAL "\033[1;0m" 380 #define ACTION _("\033[1;33maction:\033[1;0m") 381 #define USAGE _("\033[1;33musage: \033[1;0m") 382 #define OPTIONS _("\033[1;33moptions\033[1;0m") 383 #define REQUIRED _("\033[1;33mrequired\033[1;0m") 384 #define DESCRIPTION _("\033[1;33mdescription: \033[1;0m") 385 #define COMMAND _("\033[1;34mcommand\033[1;0m") 390 CANNOT_DOWNLOAD_FILE,
397 CANNOT_READ_DIRECTORY,
401 CANNOT_DETERMINE_NAME_BUILDNR,
407 CANNOT_LOCK_DIRECTORY,
409 CANNOT_CREATE_DIRECTORY,
410 CANNOT_RENAME_DIRECTORY,
415 ONLY_ROOT_CAN_INSTALL_UPGRADE_REMOVE,
417 PACKAGE_ALLREADY_INSTALL,
419 PACKAGE_NOT_PREVIOUSLY_INSTALL,
420 LISTED_FILES_ALLREADY_INSTALLED,
421 PKGADD_CONFIG_LINE_TOO_LONG,
422 PKGADD_CONFIG_WRONG_NUMBER_ARGUMENTS,
423 PKGADD_CONFIG_UNKNOWN_ACTION,
424 PKGADD_CONFIG_UNKNOWN_EVENT,
425 CANNOT_COMPILE_REGULAR_EXPRESSION,
426 CANNOT_GENERATE_LEVEL,
427 NOT_INSTALL_PACKAGE_NEITHER_PACKAGE_FILE
440 #define uint8 unsigned char 441 #define uint32 unsigned long int 451 void md5_update(
struct md5_context *ctx, uint8 *input, uint32 length );
452 void md5_finish(
struct md5_context *ctx, uint8 digest[16] );
462 #include <sys/stat.h> 467 #define PACKAGE_LOCALE_DIR "/usr/share/locale" 468 #define GETTEXT_PACKAGE "cards" 470 void *Malloc(
size_t s);
474 std::string parameter;
495 void addItemToItemList(
itemList *list,
const char *item);
507 (std::string s,
char delimiter);
509 std::set<std::string> getKeysList
510 (std::string file, std::string delimiter);
512 std::string getValueOfKey
513 (std::string file, std::string delimiter,std::string parameter);
515 std::string getValue(
const std::string& s,
char delimiter);
516 std::string getValueBefore(
const std::string& s,
char del );
517 std::string itos(
unsigned int value);
518 std::string ultos(
unsigned long int value);
520 std::string mtos(mode_t mode);
521 std::string trimFileName(
const std::string& filename);
522 std::string sizeHumanRead(
int value);
526 std::string getFirstValueOfKeyAfterDelim(
const std::string& s,
char delimiter);
530 std::string getFirstValueOfKeyBeforeDelim(
const std::string& s,
char delimiter);
533 std::string stripWhiteSpace(
const std::string& s);
536 std::vector<std::string> parseDelimitedList
537 (
const std::string& s,
const char delimiter);
540 std::set<std::string> parseDelimitedSetList
541 (
const std::string& s,
const char delimiter);
544 bool startsWith(
const std::string& s,
const std::string& with);
550 bool startsWithNoCase(
const std::string& s1,
const std::string& s2);
552 std::string convertToLowerCase(
const std::string& s);
553 std::string convertToUpperCase(
const std::string& s);
555 std::string replaceAll
556 ( std::string& in,
const std::string& oldString,
const std::string& newString );
568 void split(
const std::string& s,
char del,
570 int startPos,
bool useEmpty )
572 std::string line = s;
574 std::string::size_type pos;
575 int offset = startPos;
576 while ( ( pos = line.find( del, offset ) ) != std::string::npos ) {
578 if ( line[pos-1] ==
'\\' ) {
580 ss = ss + line.substr(0,pos);
584 std::string val = line.substr( 0, pos );
585 if ( ( useEmpty || !stripWhiteSpace( val ).empty() ) ||
586 ( ss.length() > 0 ) ) {
587 target.push_back( ss + val );
589 line.erase( 0, pos+1 );
592 if ( ( line.length() > 0 ) || ( ss.length() > 0 ) ) {
593 target.push_back( ss + line );
602 #include <sys/param.h> 603 #include <sys/file.h> 608 #define S_CARDS_MODE 0755 611 #define WS_RECURSIVE (1 << 0) 612 #define WS_DEFAULT WS_RECURSIVE 613 #define WS_FOLLOWLINK (1 << 1) 614 #define WS_DOTFILES (1 << 2) 615 #define WS_MATCHDIRS (1 << 3) 627 std::string filename;
642 std::string hostname;
643 std::string database;
644 std::string username;
645 std::string password;
647 std::string collection;
652 std::vector<std::string> locale;
653 std::vector<DirUrl> dirUrl;
654 std::vector<std::string> baseDir;
655 std::vector<std::string> archs;
658 int getConfig(
const char *fileName,
Config& config);
659 void * getDatas (
void * var, FILE * file,
long offset,
size_t size,
size_t nmemb);
660 std::string trimFileName(
const std::string& filename);
661 time_t getEpochModifyTimeFile(
const std::string& filename);
662 std::string getDateFromEpoch(
const time_t& epoch);
663 std::string getModifyTimeFile(
const std::string& filename);
664 bool checkFileExist(
const std::string& filename);
665 bool checkFileEmpty(
const std::string& filename);
666 bool checkRegularFile(
const std::string& filename);
667 bool checkFileSignature(
const std::string& filename,
const std::string& signature);
668 bool checkFilesEqual(
const std::string& file1,
const std::string& file2);
669 bool checkPermissionsEqual(
const std::string& file1,
const std::string& file2);
670 bool createRecursiveDirs(
const std::string& pathname);
671 void cleanupMetaFiles(
const std::string& basedir);
672 void removeFile(
const std::string& basedir,
const std::string& filename);
673 int copyFile(
const char * destFile,
const char * origFile);
674 int findFile(std::set<std::string>& filesList,
const std::string& basedir);
675 int findDir(
itemList *filenameList,
const char *path);
676 int findRecursiveFile(std::set<std::string>& filenameList,
const char *filename,
int spec);
677 int readFileStripSpace(
itemList *fileContent,
const char *fileName);
678 int readFile(
itemList *fileContent,
const char *fileName);
679 int parseFile(std::set<std::string>& fileContent,
const char* fileName);
680 int parseFile(std::vector<std::string>& fileContent,
const char* fileName);
681 bool findMD5sum(
const std::string& fileName,
unsigned char* result);
682 bool checkMD5sum(
const char * fileName,
const char * MD5Sum);
686 int parseFile( T& target,
const char* fileName)
688 FILE *fp = fopen (fileName,
"r");
691 const int length = BUFSIZ;
694 while (fgets(input, length, fp)) {
695 input[strlen(input)-1] =
'\0';
697 target.push_back(line);
708 #include <archive_entry.h> 711 #if ARCHIVE_VERSION_NUMBER >= 3000000 712 #define INIT_ARCHIVE(ar) \ 713 archive_read_support_filter_gzip((ar)); \ 714 archive_read_support_filter_bzip2((ar)); \ 715 archive_read_support_filter_xz((ar)); \ 716 archive_read_support_format_tar((ar)) 717 #define FREE_ARCHIVE(ar) \ 718 archive_read_free((ar)) 720 #define INIT_ARCHIVE(ar) \ 721 archive_read_support_compression_gzip((ar)); \ 722 archive_read_support_compression_bzip2((ar)); \ 723 archive_read_support_compression_xz((ar)); \ 724 archive_read_support_format_tar((ar)) 725 #define FREE_ARCHIVE(ar) \ 726 archive_read_finish((ar)) 729 #define DEFAULT_BYTES_PER_BLOCK (20 * 512) 730 #define METAFILE ".META" 731 #define INFOFILE ".INFO" 732 #define MTREEFILE ".MTREE" 738 CANNOT_FIND_META_FILE,
739 CANNOT_FIND_MTREE_FILE,
754 virtual void treatErrors(
const std::string& s)
const;
762 unsigned int long size();
763 std::set<std::string> setofFiles();
764 std::set<std::string> listofDependencies();
765 std::set<std::string> listofAlias();
766 std::set<std::pair<std::string,time_t> > listofDependenciesBuildDate();
768 std::string version();
770 std::string description();
772 std::string contributors();
773 std::string maintainer();
774 std::string collection();
775 std::string packager();
776 std::string builddate();
778 std::string namebuildn();
779 std::string epochBuildDate();
784 std::string getPackageName();
785 std::string getPackageArch();
786 std::vector<std::string> extractFileContent(
const char * fileName);
787 void getRunTimeDependencies();
788 void getRunTimeDependenciesEpoch();
791 unsigned int long m_size;
793 std::vector<std::string> m_contentMtree;
794 std::vector<std::string> m_contentMeta;
795 std::vector<std::string> m_contentInfo;
797 std::set<std::string> m_rtDependenciesList;
798 std::set<std::pair<std::string,time_t> > m_rtDependenciesEpochList;
799 std::string m_fileName;
800 std::string m_packageName;
801 std::string m_packageArch;
802 std::set<std::string> m_filesList;
803 std::set<std::string> m_aliasList;
805 archive_error m_actualError;
808 int openArchive(
const char *fileName);
834 std::string s_buildDate;
835 std::string basePackageName;
836 std::string extention;
839 std::string description;
841 std::string contributors;
842 std::string maintainer;
843 std::string packager;
844 std::string fileDate;
848 std::vector<PortFilesList> portFilesList;
854 std::vector<BasePackageInfo> basePackageList;
862 std::string collection;
863 std::vector<BasePackageInfo> basePackageList;
868 Pkgrepo(
const std::string& fileName);
870 static int parseConfig(
const char *fileName,
883 std::set<std::string> getListOutOfDate();
889 std::string getPortDir (
const std::string& portName);
897 std::string getBasePortName (
const std::string& portName);
902 std::string getBasePackageName(
const std::string& packageName);
908 std::string getBasePackageVersion(
const std::string& packageName);
913 std::string getPortVersion (
const std::string& portName);
919 int getBasePackageRelease (
const std::string& packageName);
924 int getPortRelease(
const std::string& portName);
928 bool checkPortExist(
const std::string& portName);
933 std::set<std::string> getListOfPackagesFromCollection(
const std::string& collectionName);
938 time_t getBinaryBuildTime (
const std::string& portName);
944 std::set<std::string> getBinaryPackageList();
949 std::vector<RepoInfo> getRepoInfo();
955 unsigned int getPortsList();
957 bool getBinaryPackageInfo(
const std::string& packageName);
958 bool getPortInfo(
const std::string& portName);
965 int parseConfig(
const char *fileName);
979 void parsePkgRepoCollectionFile();
991 void parseCollectionDirectory();
1004 void parseCurrentPackagePkgRepoFile();
1011 void parsePackagePkgfileFile();
1014 bool m_parsePkgRepoCollectionFile;
1015 bool m_parseCollectionDirectory;
1016 bool m_parsePackagePkgfileFile;
1018 std::vector<PortsDirectory>::iterator m_PortsDirectory_i;
1019 std::vector<BasePackageInfo>::iterator m_BasePackageInfo_i;
1020 std::vector<PortFilesList>::iterator m_PortFilesList_i;
1022 std::vector<PortFilesList> m_portFilesList;
1024 std::string m_packageFileName;
1025 std::string m_packageFileNameSignature;
1026 std::string m_configFileName;
1029 std::vector<PortsDirectory> m_portsDirectoryList;
1036 Repodwl(
const char *fileName);
1047 void downloadPortsPkgRepo(
const std::string& packageName);
1059 void downloadPackageFileName(
const std::string& packageFileName);
1060 bool checkBinaryExist(
const std::string& packageName);
1061 std::string getPackageFileName(
const std::string& packageName);
1062 std::string getPackageFileNameSignature(
const std::string& packageName);
1071 #include <curl/curl.h> 1094 FileDownload(std::string url, std::string dirName, std::string fileName,
bool progress);
1105 FileDownload(std::string url, std::string dirName, std::string fileName, std::string MD5Sum ,
bool progress);
1114 FileDownload(std::vector<InfoFile> destinationFiles,
bool progress);
1121 curl_slist_free_all(m_slist);
1122 curl_global_cleanup();
1123 curl_easy_cleanup(m_curl);
1136 void downloadFile();
1138 static int updateProgressHandle(
void *p,
double dltotal,
double dlnow,
double ultotal,
double ulnow);
1139 static size_t writeToStreamHandle(
void *buffer,
size_t size,
size_t nmemb,
void *stream);
1140 int updateProgress(
void *p,
double dltotal,
double dlnow,
double ultotal,
double ulnow);
1141 size_t writeToStream(
void *buffer,
size_t size,
size_t nmemb,
void *stream);
1142 void initFileToDownload(std::string _url, std::string _file);
1147 bool checkUpToDate();
1153 struct curl_slist *m_slist;
1154 void updateProgress();
1157 CURLcode m_curlCode;
1158 dwlProgress m_downloadProgress;
1161 std::string m_downloadFileName;
1164 std::string m_MD5Sum;
1178 #include <sys/types.h> 1179 #include <sys/wait.h> 1194 process(
const std::string& app,
const std::string& args,
int fileDescriptorLog=0 );
1196 void execute(
const std::string& app,
const std::string& arguments,
int fileDescriptorLog=0 );
1222 int exec(
const int argc,
char** argv);
1223 int execLog(
const int argc,
char** argv);
1225 int execShell(
const char* shell);
1226 int execShellLog(
const char* shell);
1228 std::string m_application;
1229 std::string m_arguments;
1230 int m_fileDescriptorLog;
1240 #include <sys/stat.h> 1243 int getRuntimeLibrariesList (std::set<std::string>& runtimeLibrariesList,
const std::string& filename);
1252 #include <stdexcept> 1254 #include <algorithm> 1257 #include <ext/stdio_filebuf.h> 1263 #define LDCONFIG "sbin/ldconfig" 1264 #define LDCONFIG_CONF "etc/ld.so.conf" 1265 #define LDCONFIG_CONF_ARGS "-r " 1266 #define SHELL "bin/sh" 1268 #define INSTALL_INFO "usr/bin/install-info" 1269 #define INSTALL_INFO_ARGS "--info-dir=usr/share/info " 1270 #define UPDATE_ICON "usr/bin/gtk-update-icon-cache" 1271 #define UPDATE_ICON_ARGS "-f -t " 1273 #define COMPILE_SCHEMAS "usr/bin/glib-compile-schemas" 1274 #define COMPILE_SCHEMAS_ARGS "" 1276 #define UPDATE_DESKTOP_DB "usr/bin/update-desktop-database" 1277 #define UPDATE_DESKTOP_DB_ARGS "-q " 1279 #define UPDATE_MIME_DB "usr/bin/update-mime-database" 1280 #define UPDATE_MIME_DB_ARGS "-n " 1282 #define GDK_PIXBUF_QUERY_LOADER "usr/bin/gdk-pixbuf-query-loaders" 1283 #define GDK_PIXBUF_QUERY_LOADER_ARGS "--update-cache" 1285 #define GIO_QUERYMODULES "usr/bin/gio-querymodules" 1286 #define GIO_QUERYMODULES_ARGS "usr/lib/gio/modules" 1288 #define QUERY_IMMODULES_3 "usr/bin/gtk-query-immodules-3.0" 1289 #define QUERY_IMMODULES_3_ARGS "--update-cache" 1291 #define QUERY_IMMODULES_2 "usr/bin/gtk-query-immodules-2.0" 1292 #define QUERY_IMMODULES_2_ARGS "--update-cache" 1302 PKG_PREINSTALL_START,
1307 PKG_POSTINSTALL_START,
1308 PKG_POSTINSTALL_END,
1309 PKG_MOVE_META_START,
1323 std::string collection;
1324 std::string description;
1325 std::string signature;
1327 std::string version;
1330 std::string contributors;
1331 std::string packager;
1332 std::string maintainer;
1336 std::set< std::pair<std::string,time_t> > dependencies;
1337 std::set<std::string> alias;
1338 std::set<std::string> files;
1340 typedef std::map<std::string, pkginfo_t> packages_t;
1341 typedef std::map<std::string, std::string> alias_t;
1360 std::string pattern;
1367 explicit Pkgdbh(
const std::string& name);
1371 virtual void parseArguments(
int argc,
char** argv);
1372 virtual void run(
int argc,
char** argv) {};
1373 virtual void run() {};
1375 virtual void printHelp()
const {};
1377 virtual void progressInfo()
const;
1378 virtual void treatErrors(
const std::string& s)
const;
1381 void print_version()
const;
1382 int getNumberOfPackages();
1383 std::set<std::string> getListOfPackageName();
1384 bool checkPackageNameExist(
const std::string& name)
const;
1389 std::set<std::string> getFilesOfPackage(
const std::string& packageName);
1390 int getListOfPackageNames(
const std::string& path);
1391 std::pair<std::string, pkginfo_t> getInfosPackage(
const std::string& packageName);
1392 void buildSimpleDatabase();
1393 void buildCompleteDatabase(
const bool& silent);
1394 void buildDatabase(
const bool& progress,
1398 const std::string& packageName);
1401 void addPackageFilesRefsToDB(
const std::string& name,
1404 bool checkPackageNameUptodate(
const std::pair<std::string,
1406 bool checkPackageNameBuildDateSame(
const std::pair<std::string,
1407 time_t>& dependencieNameBuild);
1412 void removePackageFiles(
const std::string& name);
1413 void removePackageFiles(
const std::string& name,
1414 const std::set<std::string>& keep_list);
1419 void removePackageFilesRefsFromDB(
const std::string& name);
1420 void removePackageFilesRefsFromDB(std::set<std::string> files,
1421 const std::set<std::string>& keep_list);
1422 std::set<std::string> getConflictsFilesList(
const std::string& name,
1426 std::pair<std::string, pkginfo_t> openArchivePackage(
const std::string& filename);
1427 std::set< std::pair<std::string, time_t> > getPackageDependencies(
const std::string& filename);
1428 void extractAndRunPREfromPackage(
const std::string& filename);
1429 void installArchivePackage(
const std::string& filename,
1430 const std::set<std::string>& keep_list,
1431 const std::set<std::string>& non_install_files);
1436 void moveMetaFilesPackage(
const std::string& name,
pkginfo_t& info);
1439 void readRulesFile();
1440 void getInstallRulesList(
const std::vector<rule_t>& rules,
1441 rule_event_t event, std::vector<rule_t>& found)
const;
1442 bool checkRuleAppliesToFile(
const rule_t& rule,
1443 const std::string& file);
1445 void getFootprintPackage(std::string& filename);
1447 std::string m_packageArchiveName;
1448 std::string m_packageName;
1449 std::string m_packageArchiveVersion;
1450 std::string m_packageArchiveRelease;
1451 std::string m_packageArchiveCollection;
1452 std::string m_packageVersion;
1453 std::string m_packageRelease;
1454 std::string m_packageCollection;
1455 std::string m_utilName;
1457 std::string m_build;
1458 std::vector<rule_t> m_actionRules;
1459 std::set< std::pair<std::string, int> > m_postInstallList;
1460 alias_t m_listOfAlias;
1462 packages_t m_listOfInstPackages;
1463 packages_t m_listOfDepotPackages;
1465 action m_actualAction;
1466 error m_actualError;
1470 void runLastPostInstall();
1472 std::set<std::string> m_runtimeLibrariesList;
1473 std::set<std::string> m_filesList;
1474 std::set<std::string> m_packageNamesList;
1475 unsigned int m_filesNumber;
1476 unsigned int m_installedFilesNumber;
1480 bool m_miniDB_Empty;
1485 Db_lock(
const std::string& m_root,
bool exclusive);
1490 struct sigaction m_sa;
1493 void assertArgument(
char** argv,
int argc,
int index);
1494 void rotatingCursor();
1520 Pkgadd(
const std::string& commandName);
1521 void parseArguments(
int argc,
char** argv);
1525 virtual void run(
int argc,
char** argv);
1526 virtual void printHelp()
const;
1533 std::set<std::string> getKeepFileList(
const std::set<std::string>& files,
1534 const std::vector<rule_t>& rules);
1535 std::set<std::string> applyInstallRules(
const std::string& name,
1537 const std::vector<rule_t>& rules);
1538 void applyPostInstallRules(
const std::string& name,
1540 const std::vector<rule_t>& rules);
1541 void getInstallRulesList(
const std::vector<rule_t>& rules,
1543 std::vector<rule_t>& found)
const;
1544 void getPostInstallRulesList(
const std::vector<rule_t>& rules,
1545 std::vector<rule_t>& found)
const;
1556 Pkgrm(
const std::string& commandName) :
Pkgdbh(commandName) {}
1559 void run(
int argc,
char** argv);
1560 void printHelp()
const;
1576 Pkginfo(
const std::string& commandName);
1578 virtual void run(
int argc,
char** argv);
1579 virtual void parseArguments(
int argc,
char** argv);
1581 virtual void finish();
1582 virtual void printHelp()
const;
1586 int m_runtimedependencies_mode;
1587 int m_footprint_mode;
1589 int m_installed_mode;
1593 int m_libraries_mode;
1605 Pkginst(
const std::string& commandName,
const char *configFileName);
1606 void generateDependencies(
const std::pair<std::string,time_t>& packageName);
1607 void generateDependencies();
1610 std::vector<std::string> m_dependenciesList;
1619 #include <curl/curl.h> 1620 #include <sys/types.h> 1621 #include <sys/stat.h> 1634 Pkgsync(
const std::string& url,
1635 const std::string& directory,
1636 const std::string& repoFile);
1638 virtual void treatErrors(
const std::string& s)
const;
1641 virtual void purge();
1642 static const std::string DEFAULT_REPOFILE;
1644 void setRootPath(
const std::string& path);
1645 void setConfigFile(
const std::string& file);
1649 unsigned int getLocalPackages(
const std::string& path);
1650 unsigned int getRemotePackages(
const std::string& pkgrepoFile);
1652 void deleteFolder(
const std::string& folderName);
1654 std::set<std::string> m_localPackagesList;
1655 std::set<std::string> m_remotePackagesList;
1656 const std::string m_baseDirectory;
1657 const std::string m_remoteUrl;
1658 std::string m_repoFile;
1660 std::string m_configFile;
1661 error m_actualError;
Definition: libcards.h:1320
Definition: libcards.h:481
Definition: libcards.h:865
Definition: libcards.h:814
Definition: libcards.h:1358
Definition: libcards.h:1574
Definition: error_treat.h:88
Definition: archive_utils.h:67
Definition: libcards.h:859
Definition: file_utils.h:64
Definition: libcards.h:851
Definition: libcards.h:832
Definition: libcards.h:472
Definition: libcards.h:1554
Definition: libcards.h:1626
Pkgadd class.
Definition: libcards.h:1509
Definition: libcards.h:443
Definition: file_utils.h:69
File Download class.
Definition: file_download.h:43
Definition: libcards.h:1483
Definition: libcards.h:1190
Definition: file_utils.h:53
Definition: libcards.h:1034
Definition: libcards.h:1364
~FileDownload()
Definition: libcards.h:1119
Definition: libcards.h:1603