Rewrite the internal code of get functions.

getExportVars -> getExportVarCount , getExportVarList
getExportFuncs -> getExportFuncCount , getExportFuncList
getPragmas -> getPragmaCount , getPragmaList
getFunctions -> getFuncCount, getFuncNameList
getFunctionBinary -> getFuncBinary
diff --git a/lib/bcc/ScriptCached.cpp b/lib/bcc/ScriptCached.cpp
index 6b27388..8011458 100644
--- a/lib/bcc/ScriptCached.cpp
+++ b/lib/bcc/ScriptCached.cpp
@@ -40,57 +40,51 @@
   if (mpExportFuncs) { free(mpExportFuncs); }
 }
 
-void ScriptCached::getExportVars(BCCsizei *actualVarCount,
-                                 BCCsizei maxVarCount,
-                                 BCCvoid **vars) {
-  int varCount = static_cast<int>(mpExportVars->count);
+void ScriptCached::getExportVarList(size_t varListSize, void **varList) {
+  if (varList) {
+    size_t varCount = getExportVarCount();
 
-  if (actualVarCount)
-    *actualVarCount = varCount;
-  if (varCount > maxVarCount)
-    varCount = maxVarCount;
-  if (vars) {
-    void **ptr = mpExportVars->cached_addr_list;
-    for (int i = 0; i < varCount; i++) {
-      *vars++ = *ptr++;
+    if (varCount > varListSize) {
+      varCount = varListSize;
     }
+
+    memcpy(varList, mpExportVars->cached_addr_list, sizeof(void *) * varCount);
   }
 }
 
 
-void ScriptCached::getExportFuncs(BCCsizei *actualFuncCount,
-                                  BCCsizei maxFuncCount,
-                                  BCCvoid **funcs) {
-  int funcCount = static_cast<int>(mpExportFuncs->count);
+void ScriptCached::getExportFuncList(size_t funcListSize, void **funcList) {
+  if (funcList) {
+    size_t funcCount = getExportFuncCount();
 
-  if (actualFuncCount)
-    *actualFuncCount = funcCount;
-  if (funcCount > maxFuncCount)
-    funcCount = maxFuncCount;
-  if (funcs) {
-    void **ptr = mpExportFuncs->cached_addr_list;
-    for (int i = 0; i < funcCount; i++) {
-      *funcs++ = *ptr++;
+    if (funcCount > funcListSize) {
+      funcCount = funcListSize;
     }
+
+    memcpy(funcList, mpExportFuncs->cached_addr_list,
+           sizeof(void *) * funcCount);
   }
 }
 
 
-void ScriptCached::getPragmas(BCCsizei *actualStringCount,
-                              BCCsizei maxStringCount,
-                              BCCchar **strings) {
-  int stringCount = static_cast<int>(mPragmas.size()) * 2;
+void ScriptCached::getPragmaList(size_t pragmaListSize,
+                                 char const **keyList,
+                                 char const **valueList) {
+  size_t pragmaCount = getPragmaCount();
 
-  if (actualStringCount)
-    *actualStringCount = stringCount;
+  if (pragmaCount > pragmaListSize) {
+    pragmaCount = pragmaListSize;
+  }
 
-  if (stringCount > maxStringCount)
-    stringCount = maxStringCount;
+  if (keyList) {
+    for (size_t i = 0; i < pragmaCount; ++i) {
+      *keyList++ = mPragmas[i].first;
+    }
+  }
 
-  if (strings) {
-    for (int i = 0; stringCount >= 2; stringCount -= 2, ++i) {
-      *strings++ = const_cast<BCCchar *>(mPragmas[i].first);
-      *strings++ = const_cast<BCCchar *>(mPragmas[i].second);
+  if (valueList) {
+    for (size_t i = 0; i < pragmaCount; ++i) {
+      *valueList++ = mPragmas[i].second;
     }
   }
 }
@@ -102,36 +96,40 @@
 }
 
 
-void ScriptCached::getFunctions(BCCsizei *actualFunctionCount,
-                                BCCsizei maxFunctionCount,
-                                BCCchar **functions) {
-  int functionCount = mFunctions.size();
+void ScriptCached::getFuncNameList(size_t funcNameListSize,
+                                   char const **funcNameList) {
+  if (funcNameList) {
+    size_t funcCount = getFuncCount();
 
-  if (actualFunctionCount)
-    *actualFunctionCount = functionCount;
-  if (functionCount > maxFunctionCount)
-    functionCount = maxFunctionCount;
-  if (functions) {
+    if (funcCount > funcNameListSize) {
+      funcCount = funcNameListSize;
+    }
+
     for (FuncTable::const_iterator
          I = mFunctions.begin(), E = mFunctions.end();
-         I != E && (functionCount > 0); I++, functionCount--) {
-      *functions++ = const_cast<BCCchar*>(I->first.c_str());
+         I != E && funcCount > 0; I++, funcCount--) {
+      *funcNameList++ = I->first.c_str();
     }
   }
 }
 
 
-void ScriptCached::getFunctionBinary(BCCchar *funcname,
-                                     BCCvoid **base,
-                                     BCCsizei *length) {
+void ScriptCached::getFuncBinary(char const *funcname,
+                                 void **base,
+                                 size_t *length) {
   FuncTable::const_iterator I = mFunctions.find(funcname);
+
+#define DEREF_ASSIGN(VAR, VALUE) if (VAR) { *(VAR) = (VALUE); }
+
   if (I == mFunctions.end()) {
-    *base = NULL;
-    *length = 0;
+    DEREF_ASSIGN(base, NULL);
+    DEREF_ASSIGN(length, 0);
   } else {
-    *base = I->second.first;
-    *length = I->second.second;
+    DEREF_ASSIGN(base, I->second.first);
+    DEREF_ASSIGN(length, I->second.second);
   }
+
+#undef DEREF_ASSIGN
 }