Or are you going through the exercise of parsing out the 'package' string?
Yup.
Im trying to take something like "test-1.0.0" and get back "test". Im not sure where my problem is. By itself it seems to work fine.
I was trying to keep the code short, looks like ill have to post alot. Sorry about that.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "package/package.h"
int isdir(struct dirent **check_dirent) {
struct stat check_stat;
if( stat((*check_dirent)->d_name, &check_stat) == 0 ) {
if( S_ISDIR(check_stat.st_mode) != 0 ) {
if( strcmp( (*check_dirent)->d_name , "." ) != 0 ) {
if( strcmp( (*check_dirent)->d_name , ".." ) != 0 ) {
return 0;
}
}
}
}
return 1;
}
int makepackagedatabase(char *folder, char *name) {
DIR *master = opendir(folder);
struct dirent *master_dirent;
DIR *crawl;
struct dirent *crawl_dirent;
char *open = NULL;
FILE *database = fopen(name, "w");
char *package = NULL;
char *version = NULL;
if(master != NULL) {
while( (master_dirent = readdir(master)) != 0 ) {
if( isdir(&master_dirent) == 0 ) {
open = malloc( strlen(folder) + strlen(master_dirent->d_name) + 3 );
sprintf(open, "%s\\%s", folder, master_dirent->d_name);
chdir(open);
crawl = opendir(open);
while( (crawl_dirent = readdir(crawl)) != 0 ) {
if( isdir(&crawl_dirent) == 0 ) {
getpackagename(crawl_dirent->d_name, &package);
getpackageversion(crawl_dirent->d_name, &version);
printf("%s\t%s\n", package, version);
fprintf(database, "%s\t%s\n", package, version);
free(package);
free(version);
}
}
closedir(crawl);
chdir("..");
}
}
closedir(master);
fclose(database);
} else {
perror("Error: ");
}
return 0;
}
int main() {
makepackagedatabase("I:\\packager", "I:\\packager\\database.txt");
return 0;
}