diff options
Diffstat (limited to 'storage/connect/osutil.c')
-rw-r--r-- | storage/connect/osutil.c | 180 |
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 |