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;
}