aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog13
-rw-r--r--src/hyper/Makefile.in1
-rw-r--r--src/hyper/addfile.c35
-rw-r--r--src/hyper/htadd.c4
-rw-r--r--src/hyper/hyper.h2
-rw-r--r--src/include/cfuns.h3
-rw-r--r--src/lib/cfuns-c.c74
7 files changed, 112 insertions, 20 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 738b80d7..181b1f70 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,18 @@
2008-05-21 Gabriel Dos Reis <gdr@cs.tamu.edu>
+ * include/cfuns.h (oa_get_tmpdir): Declare.
+ (oa_access_file_for_read): Likewise.
+ * lib/cfuns-c.c (oa_getcwd): Define.
+ (oa_access_file_for_read): Likewise.
+ (oa_get_tmpdir): Likewise.
+ * hyper/addfile.c: Don't include hyper.h
+ (build_ht_filename): Use oa_getcwd, oa_access_file_for_read.
+ (temp_file_open): Use oa_get_tmpdir.
+ * hyper/htadd.c (build_db_filename): Don't fall back to bogus
+ filename.
+ * hyper/hyper.h (temp_dir): Remove.
+ (def_spad): Likewise.
+
* hyper/hyper.h (connect_spad): Declare.
(gPageBeingParsed): Likewise.
* hyper/htadd.c (session_server): Remove.
diff --git a/src/hyper/Makefile.in b/src/hyper/Makefile.in
index a09184c9..83ca718f 100644
--- a/src/hyper/Makefile.in
+++ b/src/hyper/Makefile.in
@@ -117,6 +117,7 @@ clean-local: mostclean-local
-rm -f $(BINFILES)
-rm -rf $(HYPER)/pages
-rm -f $(SCRIPTS)
+ -rm -f stamp
distclean-local: clean-local
diff --git a/src/hyper/addfile.c b/src/hyper/addfile.c
index 6e460fc6..7b6121b5 100644
--- a/src/hyper/addfile.c
+++ b/src/hyper/addfile.c
@@ -33,19 +33,20 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#define _ADDFILE_C
+#include "openaxiom-c-macros.h"
-#include "debug.h"
+#include <sys/stat.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include "debug.h"
+#include "cfuns.h"
+#include "halloc.h"
#include "sockio.h"
#include "addfile.h"
-#include "hyper.h"
-#include "addfile.h"
-#include <sys/stat.h>
-#include <errno.h>
-#include "halloc.h"
static int build_ht_filename(char*, char*, char*);
static int pathname(char*);
@@ -91,7 +92,6 @@ extend_ht(char *name)
static int
build_ht_filename(char *fname, char *aname, char *name)
{
- char cdir[256];
char *c_dir;
char *HTPATH;
char *trace;
@@ -100,8 +100,9 @@ build_ht_filename(char *fname, char *aname, char *name)
if (cwd(name)) {
/* user wants to use the current working directory */
- c_dir = (char *) getcwd(cdir, 254);
+ c_dir = oa_getcwd();
strcpy(fname, c_dir);
+ free(c_dir);
/* Now add the rest of the filename */
strcat(fname, "/");
@@ -123,7 +124,7 @@ build_ht_filename(char *fname, char *aname, char *name)
extend_ht(fname);
/* Now just try to access the file */
- return (access(fname, R_OK));
+ return oa_access_file_for_read(fname);
}
else if (pathname(name)) {
/* filename already has the path specified */
@@ -145,7 +146,7 @@ build_ht_filename(char *fname, char *aname, char *name)
extend_ht(fname);
/* Now just try to access the file */
- return (access(fname, R_OK));
+ return oa_access_file_for_read(fname);
}
else {/** If not I am going to have to append path names to it **/
HTPATH = (char *) getenv("HTPATH");
@@ -175,13 +176,15 @@ build_ht_filename(char *fname, char *aname, char *name)
*trace = 0;
if (!strcmp(fname, "./")) {
/** The person wishes me to check the current directory too **/
- getcwd(fname, 256);
- strcat(fname, "/");
+ c_dir = oa_getcwd();
+ strcpy(fname,c_dir);
+ free(c_dir);
+ strcat(fname, "/");
}
if (*trace2)
trace2++;
strcat(fname, aname);
- ht_file = access(fname, R_OK);
+ ht_file = oa_access_file_for_read(fname);
}
return (ht_file);
}
@@ -303,8 +306,8 @@ temp_file_open(char *temp_db_file)
/** Just make the name and open it **/
- strcpy(temp_db_file, temp_dir);
- strcat(temp_db_file, "ht2.db" /* db_file_name */ );
+ strcpy(temp_db_file, oa_get_tmpdir());
+ strcat(temp_db_file, "/ht2.db" /* db_file_name */ );
temp_db_fp = fopen(temp_db_file, "w");
if (temp_db_fp == NULL) {
diff --git a/src/hyper/htadd.c b/src/hyper/htadd.c
index 2c0a1990..18345d8f 100644
--- a/src/hyper/htadd.c
+++ b/src/hyper/htadd.c
@@ -211,8 +211,8 @@ build_db_filename(short flag, char *db_dir, char *dbfilename)
SPAD = (char *) getenv("AXIOM");
if (SPAD == NULL) {
fprintf(stderr,
- "Build_db_filename: Defaulting on $AXIOM\n");
- SPAD = (char *) def_spad;
+ "build_db_filename: cannot find system root directory\n");
+ exit(-1);
}
sprintf(dbfilename, "%s/share/hypertex/pages/%s", SPAD, db_file_name);
sprintf(path, "%s/share/hypertex/pages", SPAD);
diff --git a/src/hyper/hyper.h b/src/hyper/hyper.h
index 7107d7d3..cbb2b506 100644
--- a/src/hyper/hyper.h
+++ b/src/hyper/hyper.h
@@ -446,9 +446,7 @@ extern int space_width;
htadd.c ******/
#define NoChar -9999
-#define temp_dir "/tmp/"
#define db_file_name "ht.db"
-#define def_spad "/usr/local/axiom"
/* Types of HyperDoc pages */
diff --git a/src/include/cfuns.h b/src/include/cfuns.h
index 52ad54f7..21f5d037 100644
--- a/src/include/cfuns.h
+++ b/src/include/cfuns.h
@@ -51,5 +51,8 @@ OPENAXIOM_EXPORT int oa_rename(const char*, const char*);
OPENAXIOM_EXPORT int oa_mkdir(const char*);
OPENAXIOM_EXPORT int oa_system(const char*);
OPENAXIOM_EXPORT char* oa_getenv(const char*);
+OPENAXIOM_EXPORT char* oa_getcwd(void);
+OPENAXIOM_EXPORT int oa_access_file_for_read(const char*);
+OPENAXIOM_EXPORT const char* oa_get_tmpdir(void);
#endif /* OPENAXIOM_CFUNS_included */
diff --git a/src/lib/cfuns-c.c b/src/lib/cfuns-c.c
index 4a1e596f..bc6e10bd 100644
--- a/src/lib/cfuns-c.c
+++ b/src/lib/cfuns-c.c
@@ -466,3 +466,77 @@ oa_getenv(const char* var)
return getenv(var);
#endif
}
+
+
+OPENAXIOM_EXPORT char*
+oa_getcwd(void)
+{
+ int bufsz = 256;
+ char* buf = (char*) malloc(bufsz);
+#ifdef __MINGW32__
+ int n = GetCurrentDirectory(bufsz, bufsz);
+ if (n == 0) {
+ perror("oa_getcwd");
+ exit(-1);
+ }
+ else if (n > bufsz) {
+ buf = realloc(buf,n);
+ if (GetCurrentDirectory(n, buf) != n) {
+ perror("oa_getcwd");
+ exit(-1);
+ }
+ }
+ return buf;
+#else /* __MINGW32__ */
+ errno = 0;
+ while (getcwd(buf,bufsz) == 0) {
+ if (errno == ERANGE) {
+ errno = 0;
+ bufsz *= 2;
+ buf = realloc(buf, bufsz);
+ }
+ else {
+ perror("oa_getcwd");
+ exit(-1);
+ }
+ }
+ return buf;
+#endif
+}
+
+OPENAXIOM_EXPORT int
+oa_access_file_for_read(const char* path)
+{
+#ifdef __MINGW32__
+ GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES ? -1 : 1;
+#else
+ return access(path, R_OK);
+#endif
+}
+
+
+OPENAXIOM_EXPORT const char*
+oa_get_tmpdir(void)
+{
+#ifdef __MINGW32__
+ char* buf;
+ /* First, probe. */
+ int bufsz = GetTempPath(0, NULL);
+ if (bufsz == 0) {
+ perror("oa_get_tmpdir");
+ exit(-1);
+ }
+ else {
+ buf = (char*) malloc(bufsz + 1);
+ if(GetTempPath(bufsz, buf) != bufsz) {
+ perror("oa_get_tmpdir");
+ free(buf);
+ exit(-1);
+ }
+ buf[bufsz] = '\0';
+ }
+ return buf;
+#else
+ return "/tmp";
+#endif
+}