home *** CD-ROM | disk | FTP | other *** search
/ Openstep 4.2 (Developer) / Openstep Developer 4.2.iso / NextDeveloper / Source / GNU / perl / Perl / ext / DynaLoader / dlutils.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-18  |  1.8 KB  |  86 lines

  1. /* dlutils.c - handy functions and definitions for dl_*.xs files
  2.  *
  3.  * Currently this file is simply #included into dl_*.xs/.c files.
  4.  * It should really be split into a dlutils.h and dlutils.c
  5.  *
  6.  */
  7.  
  8.  
  9. /* pointer to allocated memory for last error message */
  10. static char *LastError  = (char*)NULL;
  11.  
  12.  
  13.  
  14. #ifdef DEBUGGING
  15. /* currently not connected to $DynaLoader::dl_error but should be */
  16. static int dl_debug = 0;
  17. #define DLDEBUG(level,code)    if(dl_debug>=level){ code; }
  18. #else
  19. #define DLDEBUG(level,code)
  20. #endif
  21.  
  22.  
  23. static void
  24. dl_generic_private_init()    /* called by dl_*.xs dl_private_init() */
  25. {
  26. #ifdef DEBUGGING
  27.     char *perl_dl_debug = getenv("PERL_DL_DEBUG");
  28.     if (perl_dl_debug)
  29.     dl_debug = atoi(perl_dl_debug);
  30. #endif
  31. }
  32.  
  33.  
  34. /* SaveError() takes printf style args and saves the result in LastError */
  35. #ifdef STANDARD_C
  36. static void
  37. SaveError(char* pat, ...)
  38. #else
  39. /*VARARGS0*/
  40. static void
  41. SaveError(pat, va_alist)
  42.     char *pat;
  43.     va_dcl
  44. #endif
  45. {
  46.     va_list args;
  47.     char *message;
  48.     int len;
  49.  
  50.     /* This code is based on croak/warn but I'm not sure where mess() */
  51.     /* gets its buffer space from! */
  52.  
  53. #ifdef I_STDARG
  54.     va_start(args, pat);
  55. #else
  56.     va_start(args);
  57. #endif
  58.     message = mess(pat, &args);
  59.     va_end(args);
  60.  
  61.     len = strlen(message) + 1 ;    /* include terminating null char */
  62.  
  63.     /* Allocate some memory for the error message */
  64.     if (LastError)
  65.         LastError = (char*)saferealloc(LastError, len) ;
  66.     else
  67.         LastError = safemalloc(len) ;
  68.  
  69.     /* Copy message into LastError (including terminating null char)    */
  70.     strncpy(LastError, message, len) ;
  71.     DLDEBUG(2,fprintf(stderr,"DynaLoader: stored error msg '%s'\n",LastError));
  72. }
  73.  
  74.  
  75. /* prepend underscore to s. write into buf. return buf. */
  76. char *
  77. dl_add_underscore(s, buf)
  78. char *s;
  79. char *buf;
  80. {
  81.     *buf = '_';
  82.     (void)strcpy(buf + 1, s);
  83.     return buf;
  84. }
  85.  
  86.