/*
@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)
{
char character, last_character = '0', *string_depends = NULL, **depends_alone = NULL, *depends_p;
int character_count = 0, memory_count = 1, position_check = 0;
while ((character
= getc(pkgfile_dir
)) != EOF
) {
if (character == '\n')
{
if ((strstr(string_depends
, "Depends on:"))) {
string_depends[character_count] = '\0';
depends_p = string_depends;
while (*depends_p != '\0')
{
if (*depends_p == ':')
{
position_check = 1;
depends_p++;
else
{
depends_p--;
}
}
else if (position_check == 1)
{
}
depends_p++;
}
break;
}
else
{
character_count = 0;
memory_count = 1;
}
}
else
{
string_depends
= (char *) realloc(string_depends
, memory_count
); string_depends[character_count] = character;
character_count++;
memory_count++;
}
}
if (string_depends)
}
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+IG9yIDxwYWNrYWdlIHRvIHJlbW92ZT5cbkV4YW1wbGU6IHBrZ3JtZCB3aW5lLCBwa2dybWQgeG9yZywgZXRjLlxuXG4iKTsKCQkJcHJpbnRmKCJDb21tYW5kcyBhdmFpYWJsZTogXG5cbi0taGVscCAoU2hvdyB0aGlzIGhlbHApIFxuLS1pbmZvIChTaG93IHRoZSBjdXJyZW50IHZlcnNpb24gYW5kIGF1dGhvcilcbiIpOwoJCX0KCQllbHNlCgkJewoJCQlpZiAoKHN0cmxlbihhcmd2WzFdKSkgPiAwICYmIChzdHJsZW4oYXJndlsxXSkpIDwgMjUpCgkJCXsKCQkJCXNlYXJjaF9wYWNrYWdlKGFyZ3ZbMV0pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcHV0cygiW3BrZ3JtZF0gTWF4aW11bSBwYWNrYWdlIG5hbWUgaXMgMjUiKTsKCQkJfQoJCX0KCX0KCWVsc2UgCgl7CgkJcHJpbnRmKCJbcGtncm1kXSBUcnkgXCJwa2dkbXIgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFxuIik7Cgl9CgoJcmV0dXJuIDA7Cn0KCmNoYXIgKmRlcGVuZHNfcGFyc2VyKEZJTEUgKnBrZ2ZpbGVfZGlyKQp7CgljaGFyIGNoYXJhY3RlciwgbGFzdF9jaGFyYWN0ZXIgPSAnMCcsICpzdHJpbmdfZGVwZW5kcyA9IE5VTEwsICoqZGVwZW5kc19hbG9uZSA9IE5VTEwsICpkZXBlbmRzX3A7CglpbnQgY2hhcmFjdGVyX2NvdW50ID0gMCwgbWVtb3J5X2NvdW50ID0gMSwgcG9zaXRpb25fY2hlY2sgPSAwOwoKCXdoaWxlICgoY2hhcmFjdGVyID0gZ2V0Yyhwa2dmaWxlX2RpcikpICE9IEVPRikKCXsKCQlpZiAoY2hhcmFjdGVyID09ICdcbicpCgkJewoJCQlpZiAoKHN0cnN0cihzdHJpbmdfZGVwZW5kcywgIkRlcGVuZHMgb246IikpKQoJCQl7CgkJCQlzdHJpbmdfZGVwZW5kc1tjaGFyYWN0ZXJfY291bnRdID0gJ1wwJzsKCQkJCWRlcGVuZHNfcCA9IHN0cmluZ19kZXBlbmRzOwoJCQkJCgkJCQl3aGlsZSAoKmRlcGVuZHNfcCAhPSAnXDAnKQoJCQkJewoJCQkJCQoJCQkJCWlmICgqZGVwZW5kc19wID09ICc6JykKCQkJCQl7CgkJCQkJCXBvc2l0aW9uX2NoZWNrID0gMTsKCQkJCQkJZGVwZW5kc19wKys7CgoJCQkJCQlpZiAoIWlzYWxwaGEoKmRlcGVuZHNfcCkpe30KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQlkZXBlbmRzX3AtLTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlIGlmIChwb3NpdGlvbl9jaGVjayA9PSAxKQoJCQkJCXsKCQkJCQkJcHJpbnRmKCIlYyIsICpkZXBlbmRzX3ApOwoJCQkJCX0KCQkJCQkKCQkJCQlkZXBlbmRzX3ArKzsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJY2hhcmFjdGVyX2NvdW50ID0gMDsgCgkJCQltZW1vcnlfY291bnQgPSAxOwoJCQkJc3RyaW5nX2RlcGVuZHMgPSBtYWxsb2MoMCk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJCgkJCXN0cmluZ19kZXBlbmRzID0gKGNoYXIgKikgcmVhbGxvYyhzdHJpbmdfZGVwZW5kcywgbWVtb3J5X2NvdW50KTsKCQkJc3RyaW5nX2RlcGVuZHNbY2hhcmFjdGVyX2NvdW50XSA9IGNoYXJhY3RlcjsKCgkJCWNoYXJhY3Rlcl9jb3VudCsrOwoJCQltZW1vcnlfY291bnQrKzsKCQl9Cgl9CgoJaWYgKHN0cmluZ19kZXBlbmRzKQoJCWZyZWUoc3RyaW5nX2RlcGVuZHMpOwp9CgoKdm9pZCBzZWFyY2hfcGFja2FnZShjaGFyICpwYWNrYWdlX25hbWUpCnsKCUZJTEUqIHBhY2thZ2VfaW5zdGFsbGVkID0gZm9wZW4oIi92YXIvbGliL3BrZy9kYiIsICJyIik7CgkKCWNoYXIgKnBhY2thZ2VfbiwgcGFja2FnZV9maWxlX2xpbmVzWzIyNV07CglpbnQgcGFja2FnZV9pbnN0YWxsID0gMCwgcGFja2FnZV9mb3VuZCA9IDA7CgoJcGFja2FnZV9uID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihwYWNrYWdlX25hbWUpKzIpOwoKCWlmICghcGFja2FnZV9uKQoJewoJCXB1dHMoIk1hbGxvYyBjYW4gbm90IGNyZWF0ZSBtb3JlIHNwYWNlLiIpOwoJCWV4aXQoRVhJVF9GQUlMVVJFKTsKCX0KCQoJc3ByaW50ZihwYWNrYWdlX24sICIlc1xuIiwgcGFja2FnZV9uYW1lKTsKCQoJaWYgKHBhY2thZ2VfaW5zdGFsbGVkICE9IE5VTEwpCgl7CgkJd2hpbGUgKGZnZXRzKHBhY2thZ2VfZmlsZV9saW5lcywgc2l6ZW9mKHBhY2thZ2VfZmlsZV9saW5lcyksIHBhY2thZ2VfaW5zdGFsbGVkKSAhPSBOVUxMKQoJCXsKCQkJaWYgKHN0cmNtcChwYWNrYWdlX2ZpbGVfbGluZXMsIHBhY2thZ2VfbikgPT0gMCkKCQkJewoJCQkJcGFja2FnZV9pbnN0YWxsID0gMTsKCQkJCWJyZWFrOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcGFja2FnZV9pbnN0YWxsID0gMDsKCQkJfQoJCX0KCQlmcmVlKHBhY2thZ2Vfbik7Cgl9CgllbHNlCgl7CgkJcHV0cygiW3BrZ3JtZF0gSSBjYW4ndCBvcGVuIGZpbGU6IC92YXIvbGliL3BrZy9kYiAtIFNvcnJ5Iik7CgkJZXhpdChFWElUX0ZBSUxVUkUpOwoJfQoKCWZjbG9zZShwYWNrYWdlX2luc3RhbGxlZCk7CgoJaWYgKHBhY2thZ2VfaW5zdGFsbCA9PSAxKQoJewoJCURJUiAqcG9ydHNfZGlyZWN0b3J5LCAqcGFja2FnZV9kaXJlY3Rvcnk7CgkJc3RydWN0IGRpcmVudCAqc3RydWN0dXJlX2RpcmVjdG9yeSwgKnN0cnVjdHVyZV9wYWNrYWdlOwoKCQljaGFyIHBvcnRzX2Jhc2VbMTJdID0gIi91c3IvcG9ydHMvIiwgKnBhY2thZ2VfZGlyZWN0b3JpZXMgPSBOVUxMOwoKCQlpZiAoKHBvcnRzX2RpcmVjdG9yeSA9IG9wZW5kaXIocG9ydHNfYmFzZSkpICE9IE5VTEwpIAoJCXsKCQkJd2hpbGUgKChzdHJ1Y3R1cmVfZGlyZWN0b3J5ID0gcmVhZGRpcihwb3J0c19kaXJlY3RvcnkpKSAhPSBOVUxMKQoJCQl7CgkJCQlpZiAoKnN0cnVjdHVyZV9kaXJlY3RvcnktPmRfbmFtZSA9PSAnLicpIAoJCQkJCWNvbnRpbnVlOwoKCQkJCWlmIChwYWNrYWdlX2ZvdW5kID09IDEpCgkJCQkJYnJlYWs7CgoJCQkJcGFja2FnZV9kaXJlY3RvcmllcyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocG9ydHNfYmFzZSkrc3RybGVuKHN0cnVjdHVyZV9kaXJlY3RvcnktPmRfbmFtZSkrMSk7CgkJCQlpZiAoIXBhY2thZ2VfZGlyZWN0b3JpZXMpCgkJCQl7CgkJCQkJcHV0cygiTWFsbG9jIGNhbid0IGNyZWF0ZSBtb3JlIHNwYWNlLiIpOwoJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKCQkJCX0KCQkJCQoJCQkJc3ByaW50ZihwYWNrYWdlX2RpcmVjdG9yaWVzLCAiJXMlcy8iLCBwb3J0c19iYXNlLCBzdHJ1Y3R1cmVfZGlyZWN0b3J5LT5kX25hbWUpOwoKCQkJCWlmICgocGFja2FnZV9kaXJlY3RvcnkgPSBvcGVuZGlyKHBhY2thZ2VfZGlyZWN0b3JpZXMpKSAhPSBOVUxMKQoJCQkJewoJCQkJCXdoaWxlICgoc3RydWN0dXJlX3BhY2thZ2UgPSByZWFkZGlyKHBhY2thZ2VfZGlyZWN0b3J5KSkgIT0gTlVMTCkKCQkJCQl7CgkJCQkJCWlmICgqc3RydWN0dXJlX3BhY2thZ2UtPmRfbmFtZSA9PSAnLicpIAoJCQkJCQkJY29udGludWU7CgkJCQkJCQkKCQkJCQkJaWYgKHN0cmNtcChwYWNrYWdlX25hbWUsIHN0cnVjdHVyZV9wYWNrYWdlLT5kX25hbWUpID09IDApCgkJCQkJCXsKCQkJCQkJCUZJTEUgKnBrZ2J1aWxkOwoJCQkJCQkJY2hhciAqZGVwZW5kczsKCgkJCQkJCQlwYWNrYWdlX2ZvdW5kID0gMTsKCQkJCQkJCQoJCQkJCQkJZGVwZW5kcyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocGFja2FnZV9kaXJlY3Rvcmllcykrc3RybGVuKHN0cnVjdHVyZV9wYWNrYWdlLT5kX25hbWUpKzkpOwoJCQkJCQkJaWYgKCFkZXBlbmRzKQoJCQkJCQkJewoJCQkJCQkJCXB1dHMoIk1hbGxvYyBjYW4ndCBjcmVhdGUgbW9yZSBzcGFjZS4iKTsKCQkJCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CgkJCQkJCQl9CgkJCQkJCQkKCQkJCQkJCXNwcmludGYoZGVwZW5kcywgIiVzJXMvUGtnZmlsZSIsIHBhY2thZ2VfZGlyZWN0b3JpZXMsIHN0cnVjdHVyZV9wYWNrYWdlLT5kX25hbWUpOwoKCQkJCQkJCWlmICgocGtnYnVpbGQgPSBmb3BlbihkZXBlbmRzLCAiciIpKSkKCQkJCQkJCXsKCQkJCQkJCQlzdHJ1Y3Qgc3RhdCB2ZXJpZnlfZmlsZTsKCQkJCQkJCQlzdGF0KGRlcGVuZHMsICZ2ZXJpZnlfZmlsZSk7CgoJCQkJCQkJCWlmICh2ZXJpZnlfZmlsZS5zdF9zaXplIDw9IDApCgkJCQkJCQkJewoJCQkJCQkJCQlwcmludGYoIltwa2dybWRdIFRoZSBmaWxlOiAlcyB0aGlzIGluIGJsYW5rLiBQbGVhc2UgdmVyaWZ5IGFuZCB0cnkgYWdhaW4uIFxuIiwgZGVwZW5kcyk7CgkJCQkJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZSBpZiAodmVyaWZ5X2ZpbGUuc3Rfc2l6ZSA+IDApCgkJCQkJCQkJewoJCQkJCQkJCQlkZXBlbmRzX3BhcnNlcihwa2didWlsZCk7CgkJCQkJCQkJfQoJCQkJCQkJCQoJCQkJCQkJZmNsb3NlKHBrZ2J1aWxkKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQlwcmludGYoIltwa2dybWRdIFRoZSBwYWNrYWdlICVzIG5vdCBoYXZlIGZpbGUgcGtnZmlsZS4gUmVuZXcgcGtnZmlsZSB3aXRoIGNvbW1hbmRzIFwicG9ydHMgLXVcIiBhbmQgdHJ5IGFnYWluLiBcbiIsIHN0cnVjdHVyZV9wYWNrYWdlLT5kX25hbWUpOwoJCQkJCQkJfQoKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXByaW50ZigiW3BrZ3JtZF0gVGhpcyBlcnJvciBubyBpcyBmYXRhbC4gQnV0IEkgY2FuJ3Qgb3BlbiBkaXI6ICVzJXMiLCBwYWNrYWdlX2RpcmVjdG9yaWVzLCBzdHJ1Y3R1cmVfcGFja2FnZS0+ZF9uYW1lKTsKCQkJCX0KCQkJfQoJCQljbG9zZWRpcihwb3J0c19kaXJlY3RvcnkpOwoJCQljbG9zZWRpcihwYWNrYWdlX2RpcmVjdG9yeSk7CgkJfQoJCWVsc2UgCgkJewoJCQlwcmludGYoIltwa2dybWRdIEkgY2FudCByZWFkIGRpcmVjdG9yeTogJXMsIHlvdSBoYXZlIGluc3RhbGxlZCBwcnQtZ2V0PyIsIHBvcnRzX2Jhc2UpOwoJCX0KCX0KCWVsc2UKCXsKCQlwcmludGYoIltwa2dybWRdIFRoZSBwYWNrYWdlICVzIG5vdCBpcyBpbnN0YWxsZWQuIFxuW3BrZ3JtZF0gUGxlYXNlIHZlcmlmeSBwYWNrYWdlIHdpdGg6IHBydC1nZXQgc2VhcmNoIFtuYW1lX3BhY2thZ2VdIFxuIiwgcGFja2FnZV9uYW1lKTsKCX0KfQ==