help dlopen()!

Nikos Mavroyanopoulos nmav at hellug.gr
Sat Mar 18 15:09:26 EET 2000


Με το παρακάτω, ψάχνω για συγκεκριμένα symbols σε shared βιβλιοθήκες. Το πρόβλημα
είναι ότι δίνει segfault, μετά απο κάποιες επαναλήψεις... Με έχει παιδεψει
αρκετά μα δεν κατάφερα να βρώ που κολλάει. Καμιά ιδέα;

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <dlfcn.h>

#define DIRECTORY "/lib"

int main() {
	DIR *pdir;
	struct dirent *dirname;
	int tmpsize;
	int i=0;

	pdir = opendir(DIRECTORY);
	if (pdir == NULL) {
		fprintf(stderr, "Unable to open directory\n");
		return -1;
	}

	for (;;) {
		i++;
		dirname = readdir(pdir);
		if (dirname != NULL) {
			if ((dirname->d_type == DT_REG)
			    || (dirname->d_type == DT_UNKNOWN)) {
				if (strlen(dirname->d_name) > 3) {
					module_ok(dirname->d_name, DIRECTORY);
				}
			}
//			if (i==10) break;
		} else {
			break;
		}

	}

	closedir(pdir);
	
	return 0;
}


int module_ok(const char *file, const char* directory)
{
	int i;
	unsigned long int ret=0;
	void *_handle;
	int (*_version) (void);
	char* sfile=malloc(200);
	

	if (file == NULL || directory==NULL) {
		free(sfile);
		return -1;
	}

	strcpy( sfile, directory);
	strcat( sfile, "/");
	strcat( sfile, file);

	_handle = dlopen(sfile, RTLD_LAZY);
	
	if (_handle==NULL) {
		fputs (dlerror(), stderr);
		fputs("\n", stderr);
		free(sfile);
		return -1;
	}

	_version = dlsym(_handle, "__version");
	if (_version==NULL) {
                 fprintf (stderr, "%s", dlerror());
                 fputs("\n", stderr);
		 dlclose(_handle);
		 free(sfile);
                 return(-1);
        }

	ret = _version();

	dlclose(_handle);
	free(sfile);
	fprintf(stderr, "file: %s/%u\n", file, ret);
	return ret;

}


-- 
Nikos Mavroyanopoulos
mailto:nmav at hellug.gr

-- 
Nikos Mavroyanopoulos
mailto:nmav at hellug.gr
--
====================================================================
Gia boithia (h na diagrafhte) e-mail sto majordomo at hellug.gr
Ta archives tis listas einai sto http://lists.hellug.gr/lgu.html
prin steilete kapoia erothsh psakte mipos exei hdh apanththei.
Gia opoiodipote problima stilte e-mail ston owner-linux-greek-users at hellug.gr
====================================================================



More information about the Linux-greek-users mailing list