summaryrefslogtreecommitdiff
path: root/sbin/pdisk/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/pdisk/util.c')
-rw-r--r--sbin/pdisk/util.c164
1 files changed, 164 insertions, 0 deletions
diff --git a/sbin/pdisk/util.c b/sbin/pdisk/util.c
new file mode 100644
index 00000000000..725c4cc7ba5
--- /dev/null
+++ b/sbin/pdisk/util.c
@@ -0,0 +1,164 @@
+/*
+ * util.c -
+ *
+ * Written by Eryk Vershen (eryk@apple.com)
+ */
+
+/*
+ * Copyright 1997,1998 by Apple Computer, Inc.
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appears in all copies and
+ * that both the copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
+ * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+// for sprintf()
+#include <stdio.h>
+// for tolower()
+#include <ctype.h>
+
+#include "version.h"
+#include "util.h"
+
+
+/*
+ * Defines
+ */
+#define NumToolboxTraps() ( \
+ (NGetTrapAddress(_InitGraf, ToolTrap) \
+ == NGetTrapAddress(0xAA6E, ToolTrap)) \
+ ? 0x200 : 0x400 \
+ )
+#define GetTrapType(theTrap) ( \
+ (((theTrap) & 0x800) != 0) ? ToolTrap : OSTrap \
+ )
+
+
+/*
+ * Types
+ */
+
+
+/*
+ * Global Constants
+ */
+
+
+/*
+ * Global Variables
+ */
+static char dynamic_version[10];
+
+/*
+ * Forward declarations
+ */
+
+
+/*
+ * Routines
+ */
+void
+clear_memory(void *dataPtr, unsigned long size)
+{
+ char *ptr;
+
+ ptr = (char *) dataPtr;
+ while (size > 0) {
+ *ptr++ = 0;
+ --size;
+ }
+}
+
+
+#if !defined(__linux__) && !defined(__unix__)
+/* (see Inside Mac VI 3-8) */
+int
+TrapAvailable(short theTrap)
+{
+ TrapType trapType;
+
+ trapType = GetTrapType(theTrap);
+
+ if (trapType == ToolTrap) {
+ theTrap &= 0x07FF;
+ if (theTrap >= NumToolboxTraps())
+ theTrap = _Unimplemented;
+ }
+
+ return (
+ NGetTrapAddress(theTrap, trapType)
+ != NGetTrapAddress(_Unimplemented, ToolTrap)
+ );
+}
+#endif
+
+
+/* Ascii case-insensitive string comparison */
+int
+istrncmp(const char *x, const char *y, long len)
+{
+ unsigned char *p = (unsigned char *)x;
+ unsigned char *q = (unsigned char *)y;
+
+ while (len > 0) {
+ if (tolower(*p) != tolower(*q)) {
+ return (*p - *q);
+ } else if (*p == 0) {
+ break;
+ }
+ p++;
+ q++;
+ len--;
+ }
+ return (0);
+}
+
+
+const char *
+get_version_string(void)
+{
+ int stage;
+ /* "copy" of stuff from SysTypes.r, since we can't include that*/
+ enum {development = 0x20, alpha = 0x40, beta = 0x60, final = 0x80, /* or */ release = 0x80};
+
+ switch (kVersionStage) {
+ case development: stage = 'd'; break;
+ case alpha: stage = 'a'; break;
+ case beta: stage = 'b'; break;
+ case final: stage = 'f'; break;
+ default: stage = '?'; break;
+ }
+
+ if (kVersionBugFix != 0) {
+ if (kVersionStage == final) {
+ sprintf(dynamic_version, "%d.%d.%d",
+ kVersionMajor, kVersionMinor, kVersionBugFix);
+ } else {
+ sprintf(dynamic_version, "%d.%d.%d%c%d",
+ kVersionMajor, kVersionMinor, kVersionBugFix, stage, kVersionDelta);
+ }
+ } else {
+ if (kVersionStage == final) {
+ sprintf(dynamic_version, "%d.%d",
+ kVersionMajor, kVersionMinor);
+ } else {
+ sprintf(dynamic_version, "%d.%d%c%d",
+ kVersionMajor, kVersionMinor, stage, kVersionDelta);
+ }
+ }
+ return dynamic_version;
+}