/*
@author: Alberto Jsé <guzzan0>
@package: pkgrmd - This package remove all dependences alone of a applications.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#define VERSION "Dannie27"
void search_package(char *package_name);
char *depends_parser(FILE *pkgfile_dir);
int main(int argc, char *argv[])
{
if (argc > 1)
{
if (strncmp(argv
[1], "--info", 6) == 0) {
printf("Written by Alberto Jse <guzzan0>\nVersion: %s\n\nPlease report bug to guzzano.ve@gmail.com\n", VERSION
); }
else if (strncmp(argv
[1], "--help", 6) == 0) {
printf("Usage: pkgrmd <commands> or <package to remove>\nExample: pkgrmd wine, pkgrmd xorg, etc.\n\n"); printf("Commands avaiable: \n\n--help (Show this help) \n--info (Show the current version and author)\n"); }
else
{
{
search_package(argv[1]);
}
else
{
puts("[pkgrmd] Maximum package name is 25"); }
}
}
else
{
printf("[pkgrmd] Try \"pkgdmr --help\" for more information. \n"); }
return 0;
}
char *depends_parser(FILE *pkgfile_dir)
{
}
void search_package(char *package_name)
{
FILE
* package_installed
= fopen("/var/lib/pkg/db", "r");
char *package_n, package_file_lines[225];
int package_install = 0, package_found = 0;
if (!package_n)
{
puts("Malloc can not create more space."); }
sprintf(package_n
, "%s\n", package_name
);
if (package_installed != NULL)
{
while (fgets(package_file_lines
, sizeof(package_file_lines
), package_installed
) != NULL
) {
if (strcmp(package_file_lines
, package_n
) == 0) {
package_install = 1;
break;
}
else
{
package_install = 0;
}
}
}
else
{
puts("[pkgrmd] I can't open file: /var/lib/pkg/db - Sorry"); }
if (package_install == 1)
{
DIR *ports_directory, *package_directory;
struct dirent *structure_directory, *structure_package;
char ports_base[12] = "/usr/ports/", *package_directories = NULL;
if ((ports_directory = opendir(ports_base)) != NULL)
{
while ((structure_directory = readdir(ports_directory)) != NULL)
{
if (*structure_directory->d_name == '.')
continue;
if (package_found == 1)
break;
package_directories
= (char *) malloc(strlen(ports_base
)+strlen(structure_directory
->d_name
)+1); if (!package_directories)
{
puts("Malloc can't create more space."); }
sprintf(package_directories
, "%s%s/", ports_base
, structure_directory
->d_name
);
if ((package_directory = opendir(package_directories)) != NULL)
{
while ((structure_package = readdir(package_directory)) != NULL)
{
if (*structure_package->d_name == '.')
continue;
if (strcmp(package_name
, structure_package
->d_name
) == 0) {
FILE *pkgbuild;
char *depends;
package_found = 1;
depends
= (char *) malloc(strlen(package_directories
)+strlen(structure_package
->d_name
)+9); if (!depends)
{
puts("Malloc can't create more space."); }
sprintf(depends
, "%s%s/Pkgfile", package_directories
, structure_package
->d_name
);
if ((pkgbuild
= fopen(depends
, "r"))) {
struct stat verify_file;
stat(depends, &verify_file);
if (verify_file.st_size <= 0)
{
printf("[pkgrmd] The file: %s this in blank. Please verify and try again. \n", depends
); }
else if (verify_file.st_size > 0)
{
depends_parser(pkgbuild);
}
}
else
{
printf("[pkgrmd] The package %s not have file pkgfile. Renew pkgfile with commands \"ports -u\" and try again. \n", structure_package
->d_name
); }
break;
}
}
}
else
{
printf("[pkgrmd] This error no is fatal. But I can't open dir: %s%s", package_directories
, structure_package
->d_name
); }
}
closedir(ports_directory);
closedir(package_directory);
}
else
{
printf("[pkgrmd] I cant read directory: %s, you have installed prt-get?", ports_base
); }
}
else
{
printf("[pkgrmd] The package %s not is installed. \n[pkgrmd] Please verify package with: prt-get search [name_package] \n", package_name
); }
}
LyoKCiAgICBAYXV0aG9yOiAJCUFsYmVydG8gSnPDqSA8Z3V6emFuMD4KCUBwYWNrYWdlOgkJcGtncm1kIC0gVGhpcyBwYWNrYWdlIHJlbW92ZSBhbGwgZGVwZW5kZW5jZXMgYWxvbmUgb2YgYSBhcHBsaWNhdGlvbnMuCgoqLwoKI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZGlyZW50Lmg+CgojZGVmaW5lIFZFUlNJT04gIkRhbm5pZTI3IgoKdm9pZCBzZWFyY2hfcGFja2FnZShjaGFyICpwYWNrYWdlX25hbWUpOwpjaGFyICpkZXBlbmRzX3BhcnNlcihGSUxFICpwa2dmaWxlX2Rpcik7CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSAKewoJaWYgKGFyZ2MgPiAxKSAKCXsKCQlpZiAoc3RybmNtcChhcmd2WzFdLCAiLS1pbmZvIiwgNikgPT0gMCkKCQl7CgkJCXByaW50ZigiV3JpdHRlbiBieSBBbGJlcnRvIEpzZSA8Z3V6emFuMD5cblZlcnNpb246ICVzXG5cblBsZWFzZSByZXBvcnQgYnVnIHRvIGd1enphbm8udmVAZ21haWwuY29tXG4iLCBWRVJTSU9OKTsKCQl9CgkJZWxzZSBpZiAoc3RybmNtcChhcmd2WzFdLCAiLS1oZWxwIiwgNikgPT0gMCkKCQl7CgkJCXByaW50ZigiVXNhZ2U6IHBrZ3JtZCA8Y29tbWFuZHM+IG9yIDxwYWNrYWdlIHRvIHJlbW92ZT5cbkV4YW1wbGU6IHBrZ3JtZCB3aW5lLCBwa2dybWQgeG9yZywgZXRjLlxuXG4iKTsKCQkJcHJpbnRmKCJDb21tYW5kcyBhdmFpYWJsZTogXG5cbi0taGVscCAoU2hvdyB0aGlzIGhlbHApIFxuLS1pbmZvIChTaG93IHRoZSBjdXJyZW50IHZlcnNpb24gYW5kIGF1dGhvcilcbiIpOwoJCX0KCQllbHNlCgkJewoJCQlpZiAoKHN0cmxlbihhcmd2WzFdKSkgPiAwICYmIChzdHJsZW4oYXJndlsxXSkpIDwgMjUpCgkJCXsKCQkJCXNlYXJjaF9wYWNrYWdlKGFyZ3ZbMV0pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcHV0cygiW3BrZ3JtZF0gTWF4aW11bSBwYWNrYWdlIG5hbWUgaXMgMjUiKTsKCQkJfQoJCX0KCX0KCWVsc2UgCgl7CgkJcHJpbnRmKCJbcGtncm1kXSBUcnkgXCJwa2dkbXIgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFxuIik7Cgl9CgoJcmV0dXJuIDA7Cn0KCmNoYXIgKmRlcGVuZHNfcGFyc2VyKEZJTEUgKnBrZ2ZpbGVfZGlyKQp7CgkKfQoKCnZvaWQgc2VhcmNoX3BhY2thZ2UoY2hhciAqcGFja2FnZV9uYW1lKQp7CglGSUxFKiBwYWNrYWdlX2luc3RhbGxlZCA9IGZvcGVuKCIvdmFyL2xpYi9wa2cvZGIiLCAiciIpOwoJCgljaGFyICpwYWNrYWdlX24sIHBhY2thZ2VfZmlsZV9saW5lc1syMjVdOwoJaW50IHBhY2thZ2VfaW5zdGFsbCA9IDAsIHBhY2thZ2VfZm91bmQgPSAwOwoKCXBhY2thZ2VfbiA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocGFja2FnZV9uYW1lKSsyKTsKCglpZiAoIXBhY2thZ2VfbikKCXsKCQlwdXRzKCJNYWxsb2MgY2FuIG5vdCBjcmVhdGUgbW9yZSBzcGFjZS4iKTsKCQlleGl0KEVYSVRfRkFJTFVSRSk7Cgl9CgkKCXNwcmludGYocGFja2FnZV9uLCAiJXNcbiIsIHBhY2thZ2VfbmFtZSk7CgkKCWlmIChwYWNrYWdlX2luc3RhbGxlZCAhPSBOVUxMKQoJewoJCXdoaWxlIChmZ2V0cyhwYWNrYWdlX2ZpbGVfbGluZXMsIHNpemVvZihwYWNrYWdlX2ZpbGVfbGluZXMpLCBwYWNrYWdlX2luc3RhbGxlZCkgIT0gTlVMTCkKCQl7CgkJCWlmIChzdHJjbXAocGFja2FnZV9maWxlX2xpbmVzLCBwYWNrYWdlX24pID09IDApCgkJCXsKCQkJCXBhY2thZ2VfaW5zdGFsbCA9IDE7CgkJCQlicmVhazsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXBhY2thZ2VfaW5zdGFsbCA9IDA7CgkJCX0KCQl9CgkJZnJlZShwYWNrYWdlX24pOwoJfQoJZWxzZQoJewoJCXB1dHMoIltwa2dybWRdIEkgY2FuJ3Qgb3BlbiBmaWxlOiAvdmFyL2xpYi9wa2cvZGIgLSBTb3JyeSIpOwoJCWV4aXQoRVhJVF9GQUlMVVJFKTsKCX0KCglmY2xvc2UocGFja2FnZV9pbnN0YWxsZWQpOwoKCWlmIChwYWNrYWdlX2luc3RhbGwgPT0gMSkKCXsKCQlESVIgKnBvcnRzX2RpcmVjdG9yeSwgKnBhY2thZ2VfZGlyZWN0b3J5OwoJCXN0cnVjdCBkaXJlbnQgKnN0cnVjdHVyZV9kaXJlY3RvcnksICpzdHJ1Y3R1cmVfcGFja2FnZTsKCgkJY2hhciBwb3J0c19iYXNlWzEyXSA9ICIvdXNyL3BvcnRzLyIsICpwYWNrYWdlX2RpcmVjdG9yaWVzID0gTlVMTDsKCgkJaWYgKChwb3J0c19kaXJlY3RvcnkgPSBvcGVuZGlyKHBvcnRzX2Jhc2UpKSAhPSBOVUxMKSAKCQl7CgkJCXdoaWxlICgoc3RydWN0dXJlX2RpcmVjdG9yeSA9IHJlYWRkaXIocG9ydHNfZGlyZWN0b3J5KSkgIT0gTlVMTCkKCQkJewoJCQkJaWYgKCpzdHJ1Y3R1cmVfZGlyZWN0b3J5LT5kX25hbWUgPT0gJy4nKSAKCQkJCQljb250aW51ZTsKCgkJCQlpZiAocGFja2FnZV9mb3VuZCA9PSAxKQoJCQkJCWJyZWFrOwoKCQkJCXBhY2thZ2VfZGlyZWN0b3JpZXMgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHBvcnRzX2Jhc2UpK3N0cmxlbihzdHJ1Y3R1cmVfZGlyZWN0b3J5LT5kX25hbWUpKzEpOwoJCQkJaWYgKCFwYWNrYWdlX2RpcmVjdG9yaWVzKQoJCQkJewoJCQkJCXB1dHMoIk1hbGxvYyBjYW4ndCBjcmVhdGUgbW9yZSBzcGFjZS4iKTsKCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CgkJCQl9CgkJCQkKCQkJCXNwcmludGYocGFja2FnZV9kaXJlY3RvcmllcywgIiVzJXMvIiwgcG9ydHNfYmFzZSwgc3RydWN0dXJlX2RpcmVjdG9yeS0+ZF9uYW1lKTsKCgkJCQlpZiAoKHBhY2thZ2VfZGlyZWN0b3J5ID0gb3BlbmRpcihwYWNrYWdlX2RpcmVjdG9yaWVzKSkgIT0gTlVMTCkKCQkJCXsKCQkJCQl3aGlsZSAoKHN0cnVjdHVyZV9wYWNrYWdlID0gcmVhZGRpcihwYWNrYWdlX2RpcmVjdG9yeSkpICE9IE5VTEwpCgkJCQkJewoJCQkJCQlpZiAoKnN0cnVjdHVyZV9wYWNrYWdlLT5kX25hbWUgPT0gJy4nKSAKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkJCgkJCQkJCWlmIChzdHJjbXAocGFja2FnZV9uYW1lLCBzdHJ1Y3R1cmVfcGFja2FnZS0+ZF9uYW1lKSA9PSAwKQoJCQkJCQl7CgkJCQkJCQlGSUxFICpwa2didWlsZDsKCQkJCQkJCWNoYXIgKmRlcGVuZHM7CgoJCQkJCQkJcGFja2FnZV9mb3VuZCA9IDE7CgkJCQkJCQkKCQkJCQkJCWRlcGVuZHMgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHBhY2thZ2VfZGlyZWN0b3JpZXMpK3N0cmxlbihzdHJ1Y3R1cmVfcGFja2FnZS0+ZF9uYW1lKSs5KTsKCQkJCQkJCWlmICghZGVwZW5kcykKCQkJCQkJCXsKCQkJCQkJCQlwdXRzKCJNYWxsb2MgY2FuJ3QgY3JlYXRlIG1vcmUgc3BhY2UuIik7CgkJCQkJCQkJZXhpdChFWElUX0ZBSUxVUkUpOwoJCQkJCQkJfQoJCQkJCQkJCgkJCQkJCQlzcHJpbnRmKGRlcGVuZHMsICIlcyVzL1BrZ2ZpbGUiLCBwYWNrYWdlX2RpcmVjdG9yaWVzLCBzdHJ1Y3R1cmVfcGFja2FnZS0+ZF9uYW1lKTsKCgkJCQkJCQlpZiAoKHBrZ2J1aWxkID0gZm9wZW4oZGVwZW5kcywgInIiKSkpCgkJCQkJCQl7CgkJCQkJCQkJc3RydWN0IHN0YXQgdmVyaWZ5X2ZpbGU7CgkJCQkJCQkJc3RhdChkZXBlbmRzLCAmdmVyaWZ5X2ZpbGUpOwoKCQkJCQkJCQlpZiAodmVyaWZ5X2ZpbGUuc3Rfc2l6ZSA8PSAwKQoJCQkJCQkJCXsKCQkJCQkJCQkJcHJpbnRmKCJbcGtncm1kXSBUaGUgZmlsZTogJXMgdGhpcyBpbiBibGFuay4gUGxlYXNlIHZlcmlmeSBhbmQgdHJ5IGFnYWluLiBcbiIsIGRlcGVuZHMpOwoJCQkJCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgaWYgKHZlcmlmeV9maWxlLnN0X3NpemUgPiAwKQoJCQkJCQkJCXsKCQkJCQkJCQkJZGVwZW5kc19wYXJzZXIocGtnYnVpbGQpOwoJCQkJCQkJCX0KCQkJCQkJCQkKCQkJCQkJCWZjbG9zZShwa2didWlsZCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJcHJpbnRmKCJbcGtncm1kXSBUaGUgcGFja2FnZSAlcyBub3QgaGF2ZSBmaWxlIHBrZ2ZpbGUuIFJlbmV3IHBrZ2ZpbGUgd2l0aCBjb21tYW5kcyBcInBvcnRzIC11XCIgYW5kIHRyeSBhZ2Fpbi4gXG4iLCBzdHJ1Y3R1cmVfcGFja2FnZS0+ZF9uYW1lKTsKCQkJCQkJCX0KCgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwcmludGYoIltwa2dybWRdIFRoaXMgZXJyb3Igbm8gaXMgZmF0YWwuIEJ1dCBJIGNhbid0IG9wZW4gZGlyOiAlcyVzIiwgcGFja2FnZV9kaXJlY3Rvcmllcywgc3RydWN0dXJlX3BhY2thZ2UtPmRfbmFtZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIocG9ydHNfZGlyZWN0b3J5KTsKCQkJY2xvc2VkaXIocGFja2FnZV9kaXJlY3RvcnkpOwoJCX0KCQllbHNlIAoJCXsKCQkJcHJpbnRmKCJbcGtncm1kXSBJIGNhbnQgcmVhZCBkaXJlY3Rvcnk6ICVzLCB5b3UgaGF2ZSBpbnN0YWxsZWQgcHJ0LWdldD8iLCBwb3J0c19iYXNlKTsKCQl9Cgl9CgllbHNlCgl7CgkJcHJpbnRmKCJbcGtncm1kXSBUaGUgcGFja2FnZSAlcyBub3QgaXMgaW5zdGFsbGVkLiBcbltwa2dybWRdIFBsZWFzZSB2ZXJpZnkgcGFja2FnZSB3aXRoOiBwcnQtZ2V0IHNlYXJjaCBbbmFtZV9wYWNrYWdlXSBcbiIsIHBhY2thZ2VfbmFtZSk7Cgl9Cn0=