procname.c
上传用户:lampled
上传日期:2007-01-07
资源大小:94k
文件大小:3k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /* Copyright (C) 1995, 1996 by Sven Berkvens (sven@stack.nl) */
  2. #include "config.h"
  3. #ifdef HAVE_SYS_EXEC_H
  4. #include <sys/exec.h>
  5. #endif /* HAVE_SYS_EXEC_H */
  6. #ifdef HAVE_SYS_PARAM_H
  7. #include <sys/param.h>
  8. #endif /* HAVE_SYS_PARAM_H */
  9. #ifdef HAVE_SYS_PSTAT_H
  10. /* This is stupid but keeps the warnings away */
  11. struct pst_status;
  12. struct pst_dynamic;
  13. struct pst_static;
  14. struct pst_vminfo;
  15. struct pst_diskinfo;
  16. struct pst_processor;
  17. struct pst_lv;
  18. struct pst_swapinfo;
  19. #include <sys/pstat.h>
  20. #endif /* HAVE_SYS_PSTAT_H */
  21. #ifdef HAVE_SYS_SYSMIPS_H
  22. #include <sys/sysmips.h>
  23. #endif /* HAVE_SYS_SYSMIPS_H */
  24. #ifdef HAVE_SYS_SYSNEWS_H
  25. #include <sys/sysnews.h>
  26. #endif /* HAVE_SYS_SYSNEWS_H */
  27. #ifdef HAVE_VM_VM_H
  28. #include <vm/vm.h>
  29. #endif /* HAVE_VM_VM_H */
  30. #ifdef HAVE_MACHINE_VMPARAM_H
  31. #include <machine/vmparam.h>
  32. #endif /* HAVE_MACHINE_VMPARAM_H */
  33. #include <stdio.h>
  34. #include <unistd.h>
  35. #include <stdlib.h>
  36. #ifndef NONEWSTYLE
  37. #include <stdarg.h>
  38. #else /* Not not NONEWSTYLE */
  39. #include <varargs.h>
  40. #endif /* NONEWSTYLE */
  41. #ifdef HAVE_MEMORY_H
  42. #include <memory.h>
  43. #endif /* HAVE_MEMORY_H */
  44. #include "procname.h"
  45. #include "string.h"
  46. #ifdef NEED_DECL_ENVIRON
  47. extern char **environ;
  48. #endif /* NEED_DECL_ENVIRON */
  49. static char *procnamestart, *procnameend;
  50. #ifndef NONEWSTYLE
  51. extern VOID
  52. setprocname(const char *name, ...)
  53. {
  54. va_list ap;
  55. static char buffer[256], *argv;
  56. va_start(ap, name);
  57. #else /* Not not NONEWSTYLE */
  58. extern VOID
  59. setprocname(name, va_alist)
  60. const char *name;
  61. va_dcl
  62. {
  63. va_list ap;
  64. static char buffer[256], *argv;
  65. va_start(ap);
  66. #endif /* NONEWSTYLE */
  67. vsprintf(buffer, name, ap);
  68. va_end(ap);
  69. #ifdef PS_STRINGS
  70. PS_STRINGS->ps_nargvstr = 1;
  71. argv = buffer;
  72. PS_STRINGS->ps_argvstr = &argv;
  73. #else /* Not PS_STRINGS */
  74. #ifdef PSTAT_SETCMD
  75. {
  76. union pstun pst;
  77. pst.pst_command = buffer;
  78. pstat(PSTAT_SETCMD, pst, strlen(buffer), 0, 0);
  79. }
  80. #else /* Not HAVE_PSTAT_SETCMD */
  81. #ifdef SONY_SYSNEWS
  82. sysmips(SONY_SYSNEWS, NEWS_SETPSARGS, buffer);
  83. #else /* Not SONY_SYSNEWS */
  84. {
  85. size_t len;
  86. char *p;
  87. len = strlen(buffer);
  88. if (len > procnameend - procnamestart - 2)
  89. {
  90. len = procnameend - procnamestart - 2;
  91. buffer[len] = 0;
  92. }
  93. strcpy(procnamestart, buffer);
  94. p = procnamestart + len;
  95. while (p < procnameend)
  96. *(p++) = ' ';
  97. }
  98. #endif /* SONY_SYSNEWS */
  99. #endif /* PSTAT_SETCMD */
  100. #endif /* PS_STRINGS */
  101. }
  102. extern VOID
  103. initsetprocname DECL3(int, argc, char **, argv, char **, envp)
  104. {
  105. #ifndef PS_STRINGS
  106. int i, len;
  107. for (i = 0; envp[i]; i++)
  108. /* NOTHING HERE */;
  109. environ = (char **)malloc(sizeof(char *) * (i + 1));
  110. for (i = 0; envp[i]; i++)
  111. {
  112. len = strlen(envp[i]);
  113. environ[i] = (char *)malloc(len + 1);
  114. bcopy(envp[i], environ[i], len + 1);
  115. }
  116. environ[i] = NULL;
  117. if (i > 0)
  118. procnameend = envp[i - 1] + strlen(envp[i - 1]);
  119. else
  120. procnameend = argv[argc - 1] + strlen(argv[argc - 1]);
  121. procnamestart = argv[0];
  122. argv[1] = NULL;
  123. setprocname("xs: Process name initialized...");
  124. #else /* Not PS_STRINGS */
  125. procnamestart = procnameend = NULL;
  126. #endif /* PS_STRINGS */
  127. }