Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/01/2008, à 01:40

alexises

je comprend pas une fonction

boànjour
je travail sur l'empacktage d'un loçgiciel j'ai extret une fonction

FILE* open_el_ini (const char *mode)
{
#ifdef ENGLISH
#ifdef WINDOWS
	return my_fopen ("el.ini", mode);
#else
	char el_ini[256];
	char el_tmp[256];
	FILE *f;

	safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", configdir);
	f= my_fopen (el_ini, mode);	// try local file first
	if (f == NULL)
	{
		FILE *f2;
		int flen;
		char *data;

		//OK, no local el.ini - copy the defaults
		safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", datadir);
		f= fopen(el_ini, mode);

		if(f == NULL)
		{
			return NULL;//Shit, no global el.ini either? Fortunately we'll write one on exit...
		}

		safe_snprintf(el_tmp, sizeof (el_tmp), "%s/el.ini", configdir);
		f2= my_fopen (el_tmp, "w");

		if(f2 == NULL) {
			//Hmm... we cannot create a file in ~/.elc/
			fclose(f);
			return NULL;
		}

		//Copy the data from the global el.ini to the ~/.elc/el.ini

		fseek(f, 0, SEEK_END);
		flen=ftell(f);
		fseek(f, 0, SEEK_SET);

		data=calloc(flen+1, sizeof(char));

		fread(data, flen, sizeof(char), f);
		fwrite(data, flen, sizeof(char), f2);

		fclose(f);
		fclose(f2);
		free(data);

		//Now load it as read-only
		safe_snprintf(el_ini, sizeof (el_ini), "%s/el.ini", configdir);
		f= my_fopen(el_ini, mode);
	}

	if(f) {
		int fd = fileno (f);
		struct stat statbuff;
		fstat (fd, &statbuff);
		/* Set perms to 600 on el_ini if they are anything else */
		if (statbuff.st_mode != (S_IRUSR|S_IWUSR))
			fchmod (fd, S_IRUSR|S_IWUSR);
	}

	return f;
#endif //WINDOWS
#else //ENGLISH
	char el_ini[256];
	char el_tmp[256];
	FILE *f;
	mode_t modes;

#ifdef WINDOWS
	safe_snprintf (el_ini, sizeof (el_ini), "./data/config/el.ini");
#else //WINDOWS
	safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", configdir);
#endif //WINDOWS
	f= my_fopen (el_ini, mode);	// try local file first
	if (f == NULL)
	{
		FILE *f2;
		int flen;
		char *data;

		//OK, no local el.ini - copy the defaults
#ifdef WINDOWS
		safe_snprintf (el_ini, sizeof (el_ini), "./data/config/el.ini");
#else //WINDOWS
		safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", datadir);
#endif //WINDOWS
		f= fopen(el_ini, mode);

		if(f == NULL)
		{
			return NULL;//Shit, no global el.ini either? Fortunately we'll write one on exit...
		}

#ifdef WINDOWS
		safe_snprintf(el_tmp, sizeof (el_tmp), ".data/config/el.ini");
#else //WINDOWS
		safe_snprintf(el_tmp, sizeof (el_tmp), "%s/el.ini", configdir);
#endif //WINDOWS
		f2= my_fopen (el_tmp, "w");

		if(f2 == NULL) {
			//Hmm... we cannot create a file in ~/.lec/
			fclose(f);
			return NULL;
		}

		//Copy the data from the global el.ini to the ~/.lec/el.ini

		fseek(f, 0, SEEK_END);
		flen=ftell(f);
		fseek(f, 0, SEEK_SET);

		data=calloc(flen+1, sizeof(char));

		fread(data, flen, sizeof(char), f);
		fwrite(data, flen, sizeof(char), f2);

		fclose(f);
		fclose(f2);
		free(data);

		//Now load it as read-only
#ifdef WINDOWS
		safe_snprintf(el_ini, sizeof (el_ini), ".data/config/el.ini");
#else //WINDOWS
		safe_snprintf(el_ini, sizeof (el_ini), "%s/el.ini", configdir);
#endif //WINDOWS
		f= my_fopen(el_ini, mode);
	}

#ifndef WINDOWS
	if(f) {
		int fd = fileno (f);
		struct stat statbuff;
		fstat (fd, &statbuff);
		/* Set perms to 600 on el_ini if they are anything else */
		if (statbuff.st_mode != (S_IRUSR|S_IWUSR))
			fchmod (fd, S_IRUSR|S_IWUSR);
	}
#endif //WIN

	return f;
#endif //ENGLISH
}

qui ouvre le fichier mais je 'narrive pas à la modificier correctement pour qu'il n'ouvre pas ce fichier localement mais dans un dossier précis


/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne

#2 Le 06/01/2008, à 02:25

telliam

Re : je comprend pas une fonction

il y a pas mal de code sous flag de compilation : px tu fournir les flags?


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#3 Le 06/01/2008, à 03:55

ipingu

Re : je comprend pas une fonction

Si tu pouvais être plus clair sur exactement ce que tu veux, je ne sais pas toute la diffèrence entre ouvrir un fichier local et un fichier précis ?

Ce que tu veux est changer le fichier qui sera ouvert ? Si c'est cela, peut-être, il faut juste que tu changes les lignes ou le "el.ini" apparaît, le plus propre serait de faire un tableau de chars qui contiennent le nom du fichier.

Enfin, je peux pas t'aider vraiment avec si peu d'informations ... GL )

Hors ligne

#4 Le 06/01/2008, à 14:06

alexises

Re : je comprend pas une fonction

c'est ca que je veux et je te trouve les flag toput de suite

#ifndef ENGLISH
extern int bip_mp;
#endif //ENGLISH

je trouve pas l'autre mais je crois pas qu'il soit utile smile


/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne

#5 Le 06/01/2008, à 14:39

rotototo

Re : je comprend pas une fonction

je pense que tu devrais modifier a cet endroit :

 safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", configdir);

genre si tu veux le fichier toto.ini que se trouve dans /home/toto/init/
tu modifie comme ca :

 safe_snprintf (el_ini, sizeof (el_ini), "%s/toto.ini","/home/toto/init");

#6 Le 06/01/2008, à 14:52

alexises

Re : je comprend pas une fonction

non je veux pas le fichier toto.ini mais le fichier el.ini qui est situer ailleur qe à  coté du fichier exécutable (dans un autre dossier)


/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne

#7 Le 06/01/2008, à 14:59

rotototo

Re : je comprend pas une fonction

modifie donc configdir pour pointer sur ton repertoire .

#8 Le 06/01/2008, à 17:04

alexises

Re : je comprend pas une fonction

dans la makefile ?
tu eput me donner plus d'infos je suis meilleur en packadging que en c smile


/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne

#9 Le 06/01/2008, à 18:01

ipingu

Re : je comprend pas une fonction

Pas à  toucher au Makefile, cela concerne le code C ici.

Trouve l'endroit ou la variable configdir est initialisé, apparement c'est une variable globale, donc en dehors de la fonction. Et initialise la comme tu veux.

Hors ligne

#10 Le 06/01/2008, à 18:08

alexises

Re : je comprend pas une fonction

arf hmm il y en as pas mal

alexises@alexises-legeek-desktop:~/Bureau/packadhing/landeseternelles-1.5$ grep -i "configdir" *
CHANGES:Have windows use configdir & data dir, but just deault to current
chat.c: safe_snprintf (file, sizeof (file), "%slanguages/%s/strings/channels.xml", configdir, lang);
chat.c:         safe_snprintf (file, sizeof (file), "%slanguages/en/strings/channels.xml", configdir);
counters.c:     safe_snprintf(filename, sizeof(filename), "%s/counters_%s.dat", configdir, username);
elconfig.c:     safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", configdir);
elconfig.c:             safe_snprintf(el_tmp, sizeof (el_tmp), "%s/el.ini", configdir);
elconfig.c:             safe_snprintf(el_ini, sizeof (el_ini), "%s/el.ini", configdir);
elconfig.c:     safe_snprintf (el_ini, sizeof (el_ini), "%s/el.ini", configdir);
elconfig.c:             safe_snprintf(el_tmp, sizeof (el_tmp), "%s/el.ini", configdir);
elconfig.c:             safe_snprintf(el_ini, sizeof (el_ini), "%s/el.ini", configdir);
elmemory.c:     safe_snprintf(path, sizeof(path), "%s/elmemory.log", configdir);
errors.c:       safe_snprintf(error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:       safe_snprintf(error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:           safe_snprintf(error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:           safe_snprintf(error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:               safe_snprintf (error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:           safe_snprintf (error_log, sizeof(error_log), "%serror_log.txt", configdir);
errors.c:               safe_snprintf(func_log, sizeof(func_log), "%sfunction_log.txt", configdir);
errors.c:        safe_snprintf(func_log, sizeof(func_log), "%sfunction_log.txt", configdir);
errors.c:               safe_snprintf(connection_log, sizeof(connection_log), "%sconnection_log.txt", configdir);
errors.c:               safe_snprintf(connection_log, sizeof(connection_log), "%sconnection_log.txt", configdir);
errors.c:               safe_snprintf(connection_log, sizeof(connection_log), "%sconnection_log.txt", configdir);
errors.c:               safe_snprintf(connection_log, sizeof(connection_log), "%sconnection_log.txt", configdir);
filter.c:                               safe_snprintf (local_filters, sizeof (local_filters), "%s/local_filters.txt", configdir);
filter.c:               safe_snprintf (local_filters, sizeof (local_filters), "%s/local_filters.txt", configdir);
filter.c:       safe_snprintf (local_filters, sizeof (local_filters), "%s/local_filters.txt", configdir);
ignore.c:                                                       safe_snprintf(local_ignores, sizeof(local_ignores), "%slocal_ignores.txt", configdir);
ignore.c:                       safe_snprintf(local_ignores, sizeof(local_ignores), "%slocal_ignores.txt", configdir);
ignore.c:       safe_snprintf(local_ignores, sizeof(local_ignores), "%slocal_ignores.txt", configdir);
init.c:char configdir[256]="./";
init.c: my_strncp ( configdir, getenv ("HOME") , sizeof(configdir));
init.c: safe_strcat (configdir, "/.elc/", sizeof(configdir));
init.c:    safe_strcat (configdir, "/.lec/", sizeof(configdir));
init.c: safe_strcat (configdir, "/Library/Application\ Support/Eternal\ Lands/", sizeof(configdir));
init.c: d = opendir (configdir);
init.c:         mkdir (configdir, 0700);
init.c:         /* Set perms to 700 on configdir if they anything else */
init.c: safe_snprintf(el_cfg,  sizeof(el_cfg), "%sel.cfg", configdir);
init.c: safe_snprintf(el_cfg,  sizeof(el_cfg), "%sel.cfg", configdir);
init.c: safe_snprintf(el_cfg,  sizeof(el_cfg), "%sel.cfg", configdir);
init.c: safe_snprintf(el_cfg,  sizeof(el_cfg), "%sel.cfg", configdir);
init.h:extern char configdir[256]; /*!< the default directory where we look for configuration files */
interface.c:      safe_snprintf (marks_file, sizeof(marks_file), "%s/%s.txt", configdir, strrchr (map_file_name,'/') + 1);
keys.c: safe_snprintf (key_ini, sizeof (key_ini), "%s/key.ini", configdir);
map_io.c:       safe_snprintf (marks_file, sizeof (marks_file), "%s%s.txt", configdir, mapname + 1);
misc.c: safe_snprintf (fname, sizeof (fname), "%sscreenshots", configdir);
misc.c: safe_snprintf (fname, sizeof (fname), "%sscreenshots", configdir);
notepad.c:      safe_snprintf (file, sizeof (file), "%snotes.xml", configdir);
notepad.c:      safe_snprintf (file, sizeof (file), "%snotes.xml", configdir);
questlog.c:     safe_snprintf (questlog_ini, sizeof (questlog_ini), "%s/quest.log", configdir);
questlog.c:    snprintf (questlog_ini, sizeof (questlog_ini), "%s/%s_quest.log", configdir, temp);
questlog.c:             strcpy(questlog_ini, configdir);
questlog.c:                     safe_snprintf (questlog_ini, sizeof (questlog_ini), "%s/quest.log", configdir);
spells.c:       safe_snprintf (fname, sizeof (fname), "%s/spells_%s.dat", configdir, username);
spells.c:       safe_snprintf (fname, sizeof (fname), "%s/spells_%s.dat", configdir, username);
spells.c:       safe_snprintf (fname, sizeof (fname), "%s/spells_%s.dat", configdir, username);
spells.c:       snprintf (fname, sizeof (fname), "%s/spells_%s.dat", configdir, username);
text.c: safe_snprintf (chat_log_file, sizeof (chat_log_file),  "%s/chat_log.txt", configdir);
text.c: safe_snprintf (srv_log_file, sizeof (srv_log_file), "%s/srv_log.txt", configdir);
text.c:    safe_snprintf (chat_log_file, sizeof (chat_log_file),  "%s/chat_log_%s.txt", configdir,username_str);
text.c: safe_snprintf (srv_log_file, sizeof (srv_log_file), "%s/srv_log_%s.txt", configdir,username_str);

/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne

#11 Le 06/01/2008, à 19:33

ipingu

Re : je comprend pas une fonction

init.c:char configdir[256]="./";

Mets le dossier que tu veux à  la place de "./".

Hors ligne

#12 Le 07/01/2008, à 19:10

alexises

Re : je comprend pas une fonction

merchi tonton vien me faire un gris bisous smile


/!\ aveugle ne pas matraquer /!\
¨¨¨                                       ¨¨¨

il est ou le bouton poster ?

Hors ligne