Use sigset_t and sigfillset instead of memset
[openafs.git] / src / lwp / threadname.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9 /* ********************************************************************** */
10 /*                                                                        */
11 /*  trheadname.c                                                          */
12 /*                                                                        */
13 /*  Author: Hartmut Reuter                                                */
14 /*  reuter@rzg.mpg.de                                                     */
15 /*  Date: 01/12/00                                                        */
16 /*                                                                        */
17 /*  Function    - These routiens implement thread names for the           */
18 /*                logging from the servers                                */
19 /*                                                                        */
20 /* ********************************************************************** */
21
22 #include <afsconfig.h>
23 #include <afs/param.h>
24
25
26 #include <string.h>
27
28 #if defined(AFS_PTHREAD_ENV)
29 #include <pthread.h>
30 #else /* defined(AFS_PTHREAD_ENV) */
31 #include "lwp.h"
32 #endif /* defined(AFS_PTHREAD_ENV) */
33
34 #define MAX_THREADS 128
35 #define MAXTHREADNAMELENGTH 64
36 int nThreads = 0;
37 #if defined(AFS_PTHREAD_ENV)
38 pthread_t ThreadId[MAX_THREADS];
39 #else /* defined(AFS_PTHREAD_ENV) */
40 PROCESS ThreadId[MAX_THREADS];
41 #endif /* defined(AFS_PTHREAD_ENV) */
42 char ThreadName[MAX_THREADS][MAXTHREADNAMELENGTH];
43
44 char *
45 threadname(void)
46 {
47     int i;
48     static char MainThread[] = "main";
49     char *ptr;
50     char *p;
51 #ifdef AFS_PTHREAD_ENV
52     pthread_t me;
53 #else /* AFS_PTHREAD_ENV */
54     PROCESS me;
55 #endif /* AFS_PTHREAD_ENV */
56
57 #ifdef AFS_PTHREAD_ENV
58     me = pthread_self();
59 #else /* AFS_PTHREAD_ENV */
60     me = (PROCESS) LWP_ThreadId();
61 #endif /* AFS_PTHREAD_ENV */
62     ptr = &MainThread[0];
63     for (i = 0; i < nThreads; i++) {
64         if (ThreadId[i] == me) {
65             ptr = &ThreadName[i][0];
66             break;
67         }
68     }
69     p = ptr;
70     return p;
71 }
72
73 int
74 registerthread(
75 #ifdef AFS_PTHREAD_ENV
76                   pthread_t id,
77 #else                           /* AFS_PTHREAD_ENV */
78                   PROCESS id,
79 #endif                          /* AFS_PTHREAD_ENV */
80                   char *name)
81 {
82     int i;
83
84     for (i = 0; i < nThreads; i++) {
85         if (ThreadId[i] == id) {
86             strncpy(&ThreadName[i][0], name, MAXTHREADNAMELENGTH);
87             return 0;
88         }
89     }
90     if (nThreads == MAX_THREADS)
91         return 0;
92     ThreadId[nThreads] = id;
93     strncpy(&ThreadName[nThreads][0], name, MAXTHREADNAMELENGTH);
94     ThreadName[nThreads][MAXTHREADNAMELENGTH - 1] = 0;
95     nThreads++;
96
97     return 0;
98 }
99
100 int
101 swapthreadname(
102 #ifdef AFS_PTHREAD_ENV
103                   pthread_t id,
104 #else                           /* AFS_PTHREAD_ENV */
105                   PROCESS id,
106 #endif                          /* AFS_PTHREAD_ENV */
107                   char *new, char *old)
108 {
109     int i;
110
111     for (i = 0; i < nThreads; i++) {
112         if (ThreadId[i] == id) {
113             if (old)
114                 strncpy(old, &ThreadName[i][0], MAXTHREADNAMELENGTH);
115             strncpy(&ThreadName[i][0], new, MAXTHREADNAMELENGTH);
116             return 0;
117         }
118     }
119     return 1;
120 }