summaryrefslogtreecommitdiff
path: root/portable/src/PStackSize.c
diff options
context:
space:
mode:
Diffstat (limited to 'portable/src/PStackSize.c')
-rw-r--r--portable/src/PStackSize.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/portable/src/PStackSize.c b/portable/src/PStackSize.c
new file mode 100644
index 0000000..9679ca6
--- /dev/null
+++ b/portable/src/PStackSize.c
@@ -0,0 +1,61 @@
+/*---------------------------------------------------------------------------*
+ * PStackSize.c *
+ * *
+ * Copyright 2007, 2008 Nuance Communciations, Inc. *
+ * *
+ * Licensed under the Apache License, Version 2.0 (the 'License'); *
+ * you may not use this file except in compliance with the License. *
+ * *
+ * You may obtain a copy of the License at *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, software *
+ * distributed under the License is distributed on an 'AS IS' BASIS, *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
+ * See the License for the specific language governing permissions and *
+ * limitations under the License. *
+ * *
+ *---------------------------------------------------------------------------*/
+
+#include "pstdio.h"
+#include "PStackSize.h"
+
+#ifdef _WIN32
+
+static const char * PSTACK_BASE = NULL;
+
+/** Initialize the stack base. This should be done in the main() function.
+ * Note that the local variables of main() are not taken into account in the
+ * stack size computation. To overcome this problem, rewrite main() as a
+ * simple function that first invokes PSTACK_SIZE_INIT and then invokes the
+ * original main().
+*/
+void PSTACK_SIZE_INIT()
+{
+ PSTACK_BASE = (const char *) _alloca(0);
+}
+
+/**
+ * Computes the current stack size. The returned value is the number of bytes
+ * in the stack.
+ **/
+size_t PSTACK_SIZE_GET()
+{
+ return (PSTACK_BASE - ((const char *) _alloca(0)));
+}
+
+#else
+
+/* Insert other platform implementations here... */
+/*
+#error not supported at this time
+*/
+void PSTACK_SIZE_INIT()
+{}
+
+size_t PSTACK_SIZE_GET()
+{
+ return 0;
+}
+
+#endif