summaryrefslogtreecommitdiff
path: root/emx/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'emx/system.c')
-rw-r--r--emx/system.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/emx/system.c b/emx/system.c
new file mode 100644
index 0000000..f4481b3
--- /dev/null
+++ b/emx/system.c
@@ -0,0 +1,91 @@
+/* This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details. */
+
+#include <io.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <fnmatch.h>
+
+
+/* Expand wildcards in argv. We probably should be expanding wildcards
+ via expand_wild instead; that way we could expand only filenames and
+ not tag names and the like. */
+
+void
+os2_initialize (pargc, pargv)
+ int *pargc;
+ char **pargv[];
+{
+ _wildcard (pargc, pargv);
+}
+
+
+/* Modifies 'stat' so that always the same inode is returned. EMX never
+ returns the same value for st_ino. Without this modification,
+ release_delete in module src/release.c refuses to work. Care must
+ be taken if someone is using the value of st_ino (but as far as I know,
+ no callers are). */
+
+int
+os2_stat (name, buffer)
+ const char *name;
+ struct stat *buffer;
+{
+ int rc = stat (name, buffer);
+
+ /* There are no inodes on OS/2. */
+ buffer->st_ino = 42;
+
+ return rc;
+}
+
+
+/* We must not only change the directory, but also the current drive.
+ Otherwise it is be impossible to have the working directory and the
+ repository on different drives. */
+
+int
+os2_chdir (name)
+ const char *name;
+{
+ return _chdir2 (name);
+}
+
+
+/* getwd must return a drive specification. */
+
+char *
+xgetwd ()
+{
+ return _getcwd2 (NULL, 1);
+}
+
+
+/* fnmatch must recognize OS/2 filename conventions: Filename case
+ must be preserved, but ignored in searches. It would perhaps be better
+ to just have CVS pick how to match based on FILENAMES_CASE_INSENSITIVE
+ or something rather than having an OS/2-specific version of CVS_FNMATCH.
+ Note that lib/fnmatch.c uses FOLD_FN_CHAR; that is how we get
+ case-insensitivity on NT (and VMS, I think). */
+
+#define _FNM_OS2 1
+#define _FNM_IGNORECASE 128
+
+int
+os2_fnmatch (pattern, name, flags)
+ const char *pattern;
+ const char *name;
+ int flags;
+{
+ return fnmatch (pattern, name, _FNM_IGNORECASE | _FNM_OS2 | flags);
+}