openafs-string-header-cleanup-20071030
[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 RCSID
26     ("$Header$");
27
28 #include <string.h>
29
30 #if defined(AFS_PTHREAD_ENV)
31 #include <pthread.h>
32 #else /* defined(AFS_PTHREAD_ENV) */
33 #include "lwp.h"
34 #endif /* defined(AFS_PTHREAD_ENV) */
35
36 #define MAX_THREADS 128
37 #define MAXTHREADNAMELENGTH 64
38 int nThreads = 0;
39 #if defined(AFS_PTHREAD_ENV)
40 pthread_t ThreadId[MAX_THREADS];
41 #else /* defined(AFS_PTHREAD_ENV) */
42 PROCESS ThreadId[MAX_THREADS];
43 #endif /* defined(AFS_PTHREAD_ENV) */
44 char ThreadName[MAX_THREADS][MAXTHREADNAMELENGTH];
45
46 char *
47 threadname(void)
48 {
49     int i;
50     static char MainThread[] = "main";
51     char *ptr;
52     char *p;
53 #ifdef AFS_PTHREAD_ENV
54     pthread_t me;
55 #else /* AFS_PTHREAD_ENV */
56     PROCESS me;
57 #endif /* AFS_PTHREAD_ENV */
58
59 #ifdef AFS_PTHREAD_ENV
60     me = pthread_self();
61 #else /* AFS_PTHREAD_ENV */
62     me = (PROCESS) LWP_ThreadId();
63 #endif /* AFS_PTHREAD_ENV */
64     ptr = &MainThread[0];
65     for (i = 0; i < nThreads; i++) {
66         if (ThreadId[i] == me) {
67             ptr = &ThreadName[i][0];
68             break;
69         }
70     }
71     p = ptr;
72     return p;
73 }
74
75 int
76 registerthread(
77 #ifdef AFS_PTHREAD_ENV
78                   pthread_t id,
79 #else                           /* AFS_PTHREAD_ENV */
80                   PROCESS id,
81 #endif                          /* AFS_PTHREAD_ENV */
82                   char *name)
83 {
84     int i;
85
86     for (i = 0; i < nThreads; i++) {
87         if (ThreadId[i] == id) {
88             strncpy(&ThreadName[i][0], name, MAXTHREADNAMELENGTH);
89             return 0;
90         }
91     }
92     if (nThreads == MAX_THREADS)
93         return 0;
94     ThreadId[nThreads] = id;
95     strncpy(&ThreadName[nThreads][0], name, MAXTHREADNAMELENGTH);
96     ThreadName[nThreads][MAXTHREADNAMELENGTH - 1] = 0;
97     nThreads++;
98
99     return 0;
100 }
101
102 int
103 swapthreadname(
104 #ifdef AFS_PTHREAD_ENV
105                   pthread_t id,
106 #else                           /* AFS_PTHREAD_ENV */
107                   PROCESS id,
108 #endif                          /* AFS_PTHREAD_ENV */
109                   char *new, char *old)
110 {
111     int i;
112
113     for (i = 0; i < nThreads; i++) {
114         if (ThreadId[i] == id) {
115             if (old)
116                 strncpy(old, &ThreadName[i][0], MAXTHREADNAMELENGTH);
117             strncpy(&ThreadName[i][0], new, MAXTHREADNAMELENGTH);
118             return 0;
119         }
120     }
121     return 1;
122 }