summaryrefslogtreecommitdiffstats
path: root/storage/connect/osutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/osutil.c')
-rw-r--r--storage/connect/osutil.c180
1 files changed, 180 insertions, 0 deletions
diff --git a/storage/connect/osutil.c b/storage/connect/osutil.c
new file mode 100644
index 00000000..9b1771be
--- /dev/null
+++ b/storage/connect/osutil.c
@@ -0,0 +1,180 @@
+/* Copyright (C) MariaDB Corporation Ab */
+#include "my_global.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "osutil.h"
+#include "m_string.h"
+
+#ifdef _WIN32
+my_bool CloseFileHandle(HANDLE h)
+ {
+ return !CloseHandle(h);
+ } /* end of CloseFileHandle */
+
+#else /* UNIX */
+/* code to handle Linux and Solaris */
+#include <unistd.h>
+#include <sys/stat.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <pwd.h>
+
+extern FILE *debug;
+
+/***********************************************************************/
+/* Define some functions not existing in the UNIX library. */
+/***********************************************************************/
+PSZ strupr(PSZ p)
+ {
+ register int i;
+
+ for (i = 0; p[i]; i++)
+ p[i] = toupper(p[i]);
+
+ return (p);
+ } /* end of strupr */
+
+PSZ strlwr(PSZ p)
+ {
+ register int i;
+
+ for (i = 0; p[i]; i++)
+ p[i] = tolower(p[i]);
+
+ return (p);
+ } /* end of strlwr */
+
+/***********************************************************************/
+/* Define the splitpath function not existing in the UNIX library. */
+/***********************************************************************/
+void _splitpath(LPCSTR name, LPSTR drive, LPSTR dir, LPSTR fn, LPSTR ft)
+ {
+ LPCSTR p2, p = name;
+
+#ifdef DEBTRACE
+ htrc("SplitPath: name=%s [%s (%d)]\n",
+ XSTR(name), XSTR(__FILE__), __LINE__);
+#endif
+
+ if (drive) *drive = '\0';
+ if (dir) *dir = '\0';
+ if (fn) *fn = '\0';
+ if (ft) *ft = '\0';
+
+ if ((p2 = strrchr(p, '/'))) {
+ p2++;
+ if (dir) strncat(dir, p, p2 - p);
+ p = p2;
+ } /* endif p2 */
+
+ if ((p2 = strrchr(p, '.'))) {
+ if (fn) strncat(fn, p, p2 - p);
+ if (ft) strcpy(ft, p2);
+ } else
+ if (fn) strcpy(fn, p);
+
+#ifdef DEBTRACE
+ htrc("SplitPath: name=%s drive=%s dir=%s filename=%s type=%s [%s(%d)]\n",
+ XSTR(name), XSTR(drive), XSTR(dir), XSTR(fn), XSTR(ft), __FILE__, __LINE__);
+#endif
+ } /* end of _splitpath */
+
+/***********************************************************************/
+/* Define the makepath function not existing in the UNIX library. */
+/***********************************************************************/
+void _makepath(LPSTR name, LPCSTR drive __attribute__((unused)), LPCSTR dir, LPCSTR fn, LPCSTR ft)
+ {
+ int n;
+
+ if (!name)
+ return;
+ else
+ *name = '\0';
+
+ if (dir && (n = strlen(dir)) > 0) {
+ strcpy(name, dir);
+
+ if (name[n-1] != '/')
+ strcat(name, "/");
+
+ } /* endif dir */
+
+ if (fn)
+ strcat(name, fn);
+
+ if (ft && strlen(ft)) {
+ if (*ft != '.')
+ strcat(name, ".");
+
+ strcat(name, ft);
+ } /* endif ft */
+
+ } /* end of _makepath */
+
+my_bool CloseFileHandle(HANDLE h)
+ {
+ return (close(h)) ? TRUE : FALSE;
+ } /* end of CloseFileHandle */
+
+int GetLastError()
+ {
+ return errno;
+ } /* end of GetLastError */
+
+unsigned long _filelength(int fd)
+ {
+ struct stat st;
+
+ if (fd == -1)
+ return 0;
+
+ if (fstat(fd, &st) != 0)
+ return 0;
+
+ return st.st_size;
+ } /* end of _filelength */
+
+char *_fullpath(char *absPath, const char *relPath, size_t maxLength)
+ {
+ // Fixme
+ char *p;
+
+ if ( *relPath == '\\' || *relPath == '/' ) {
+ snprintf(absPath, maxLength, "%s", relPath);
+ } else if (*relPath == '~') {
+ // get the path to the home directory
+ struct passwd *pw = getpwuid(getuid());
+ const char *homedir = pw->pw_dir;
+
+ if (homedir)
+ snprintf(absPath, maxLength, "%s%s", homedir, relPath + 1);
+ else
+ snprintf(absPath, maxLength, "%s", relPath);
+
+ } else {
+ char buff[2*_MAX_PATH];
+
+ p= getcwd(buff, _MAX_PATH);
+ assert(p);
+ safe_strcat(buff, sizeof(buff), "/");
+ safe_strcat(buff, sizeof(buff), relPath);
+ snprintf(absPath, maxLength, "%s", buff);
+ } /* endif's relPath */
+
+ p = absPath;
+
+ for(; *p; p++)
+ if (*p == '\\')
+ *p = '/';
+
+ return absPath;
+ } /* end of _fullpath */
+
+BOOL MessageBeep(uint i __attribute__((unused)))
+ {
+ // Fixme
+ return TRUE;
+ } /* end of MessageBeep */
+
+#endif // UNIX