File: rcfile.c.patch

package info (click to toggle)
sjeng 11.2-15
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,436 kB
  • sloc: ansic: 13,378; sh: 324; makefile: 29
file content (73 lines) | stat: -rw-r--r-- 1,559 bytes parent folder | download | duplicates (4)
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();