1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
Author: Lukas Geyer <lukas@debian.org>
Description: Adjusted configuration file location.
--- sjeng-11.2.orig/rcfile.c
+++ sjeng-11.2/rcfile.c
@@ -21,16 +21,24 @@
*/
+#include <pwd.h>
+#include <unistd.h>
+#include <sys/types.h>
+
#include "sjeng.h"
#include "protos.h"
#include "extvars.h"
#include "config.h"
+/* Local name is relative to user's home directory */
+#define RC_LOCALNAME "/.sjeng/sjeng.rc"
+#define RC_GLOBALNAME "/etc/sjeng.rc"
+
FILE *rcfile;
char line[STR_BUFF];
int TTSize;
-int ECacheSize;
+unsigned int ECacheSize;
int PBSize;
int cfg_booklearn;
@@ -51,8 +59,22 @@
{
int i;
unsigned int setc;
-
- if ((rcfile = fopen ("sjeng.rc", "r")) == NULL)
+ struct passwd *pw;
+ char rcname[STR_BUFF];
+
+ rcfile = NULL;
+ pw = getpwuid(getuid());
+ if (pw != NULL &&
+ strlen(pw->pw_dir) + strlen(RC_LOCALNAME) + 1 < STR_BUFF ) {
+ strcpy(rcname, pw->pw_dir);
+ strcat(rcname, RC_LOCALNAME);
+ rcfile = fopen(rcname, "r");
+ }
+ if (rcfile == NULL) {
+ rcfile = fopen(RC_GLOBALNAME, "r");
+ }
+
+ if (rcfile == NULL)
{
printf("No configuration file!\n");
@@ -100,7 +122,7 @@
fgets(line, STR_BUFF, rcfile);
while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
- sscanf(line, "%d", &ECacheSize);
+ sscanf(line, "%u", &ECacheSize);
fgets(line, STR_BUFF, rcfile);
while (line[0] == '#') fgets(line, STR_BUFF, rcfile);
@@ -181,6 +203,7 @@
sprintf(setcode, "%u", setc);
+ fclose(rcfile);
initialize_eval();
alloc_hash();
alloc_ecache();
|