Buenas, tengo un problema con un bucle que no termina y se repita dos veces aun así coloque un break, la linea es la 137.
Código C:
Ver original/*
@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 <dirent.h>
#define VERSION "Dannie27"
void search_package(char *package_name);
void depends_parser(FILE *pkgfile_dir);
int main(int argc, char *argv[])
{
if (argc > 1)
{
if (strncmp(argv
[1], "--info", 6) == 0) {
}
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
{
{
printf("[pkgrmd] Sorry, max name package is 20 characteres. \n"); }
else
{
search_package(argv[1]);
}
}
}
else
{
printf("[pkgrmd] Try \"pkgdmr --help\" for more information. \n"); }
}
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;
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;
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;
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"))) {
}
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
); }
}
Como una duda adicional, ¿estará mal abusar de la función exit()? y he visto ejemplos donde con malloc se tiene que multiplicar lo que queremos abrir por sizeof(char*) ¿tengo que hacerlo?
Muchas gracias, saludos!