Merge pull request #140 from hussainnaqvee/patch-1
[awesomized/libmemcached] / src / libmemcached / backtrace.cc
index 8017f7a2f0437404ca37b0d39d94aca8fa2f9caa..7580d579f5dbe375c7cb6882ee4cee3f76fa5a46 100644 (file)
@@ -1,39 +1,17 @@
-/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
- *
- *  Libmemcached client library.
- *
- *  Copyright (C) 2012 Data Differential, http://datadifferential.com/
- *  All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- *
- *      * Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *      * Redistributions in binary form must reproduce the above
- *  copyright notice, this list of conditions and the following disclaimer
- *  in the documentation and/or other materials provided with the
- *  distribution.
- *
- *      * The names of its contributors may not be used to endorse or
- *  promote products derived from this software without specific prior
- *  written permission.
- *
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
+/*
+    +--------------------------------------------------------------------+
+    | libmemcached-awesome - C/C++ Client Library for memcached          |
+    +--------------------------------------------------------------------+
+    | Redistribution and use in source and binary forms, with or without |
+    | modification, are permitted under the terms of the BSD license.    |
+    | You should have received a copy of the license in a bundled file   |
+    | named LICENSE; in case you did not receive a copy you can review   |
+    | the terms online at: https://opensource.org/licenses/BSD-3-Clause  |
+    +--------------------------------------------------------------------+
+    | Copyright (c) 2006-2014 Brian Aker   https://datadifferential.com/ |
+    | Copyright (c) 2020-2021 Michael Wallner        https://awesome.co/ |
+    +--------------------------------------------------------------------+
+*/
 
 #include "mem_config.h"
 
 
 #if HAVE_BACKTRACE
 
-#include BACKTRACE_HEADER
-
-#if HAVE_ABI____CXA_DEMANGLE
-# include <cxxabi.h>
-# define USE_DEMANGLE 1
-#else
-# define USE_DEMANGLE 0
-#endif
-
-#ifdef HAVE_DLFCN_H
-# include <dlfcn.h>
-#endif
-
-const int MAX_DEPTH= 50;
-
-void custom_backtrace(void)
-{
-  void *backtrace_buffer[MAX_DEPTH +1];
-
-  int stack_frames= backtrace(backtrace_buffer, MAX_DEPTH);
-  if (stack_frames)
-  {
-    char **symbollist= backtrace_symbols(backtrace_buffer, stack_frames);
-    if (symbollist)
-    {
-      for (int x= 0; x < stack_frames; x++)
-      {
-        bool was_demangled= false;
-
-        if (USE_DEMANGLE)
-        {
-#ifdef HAVE_DLFCN_H
+#  include BACKTRACE_HEADER
+
+#  ifdef HAVE_ABI____CXA_DEMANGLE
+#    include <cxxabi.h>
+#  endif
+
+#  ifdef HAVE_DLFCN_H
+#    include <dlfcn.h>
+#  endif
+
+const int MAX_DEPTH = 50;
+
+void custom_backtrace(void) {
+  void *backtrace_buffer[MAX_DEPTH + 1];
+
+  int stack_frames = backtrace(backtrace_buffer, MAX_DEPTH);
+  if (stack_frames) {
+    char **symbollist = backtrace_symbols(backtrace_buffer, stack_frames);
+    if (symbollist) {
+      for (int x = 0; x < stack_frames; x++) {
+        bool was_demangled = false;
+
+#  ifdef HAVE_ABI____CXA_DEMANGLE
+#    ifdef HAVE_DLFCN_H
           Dl_info dlinfo;
-          if (dladdr(backtrace_buffer[x], &dlinfo))
-          {
+          if (dladdr(backtrace_buffer[x], &dlinfo)) {
             char demangled_buffer[1024];
-            const char *called_in= "<unresolved>";
-            if (dlinfo.dli_sname)
-            {
-              size_t demangled_size= sizeof(demangled_buffer);
+            const char *called_in = "<unresolved>";
+            if (dlinfo.dli_sname) {
+              size_t demangled_size = sizeof(demangled_buffer);
               int status;
-              chardemangled;
-              if ((demangled= abi::__cxa_demangle(dlinfo.dli_sname, demangled_buffer, &demangled_size, &status)))
-              {
-                called_in= demangled;
+              char *demangled;
+              if ((demangled = abi::__cxa_demangle(dlinfo.dli_sname, demangled_buffer,
+                                                   &demangled_size, &status))) {
+                called_in = demangled;
                 fprintf(stderr, "---> demangled: %s -> %s\n", demangled_buffer, demangled);
-              }
-              else
-              {
-                called_in= dlinfo.dli_sname;
+              } else {
+                called_in = dlinfo.dli_sname;
               }
 
-              was_demangled= true;
-              fprintf(stderr, "#%d  %p in %s at %s\n",
-                      x, backtrace_buffer[x],
-                      called_in,
+              was_demangled = true;
+              fprintf(stderr, "#%d  %p in %s at %s\n", x, backtrace_buffer[x], called_in,
                       dlinfo.dli_fname);
             }
           }
-#endif
-        }
+#    endif
+#  endif
 
-        if (was_demangled == false)
-        {
+        if (was_demangled == false) {
           fprintf(stderr, "?%d  %p in %s\n", x, backtrace_buffer[x], symbollist[x]);
         }
       }
@@ -118,10 +81,9 @@ void custom_backtrace(void)
   }
 }
 
-#else // HAVE_BACKTRACE
+#else  // HAVE_BACKTRACE
 
-void custom_backtrace(void)
-{
+void custom_backtrace(void) {
   fprintf(stderr, "Backtrace null function called\n");
 }
 #endif // HAVE_BACKTRACE