41
41
static struct disphist *disphist;
44
anyDisplaysLeft( void )
50
anyRunningDisplays( void )
54
for (d = displays; d; d = d->next)
67
anyReserveDisplays( void )
71
for (d = displays; d; d = d->next)
72
if ((d->displayType & d_lifetime) == dReserve)
78
idleReserveDisplays( void )
83
for (d = displays; d; d = d->next)
84
if (d->status == reserve)
90
startReserveDisplay( int lt )
92
struct display *d, *rd;
94
for (rd = 0, d = displays; d; d = d->next)
95
if (d->status == reserve)
99
rd->status = notRunning;
50
anyRunningDisplays(void)
54
for (d = displays; d; d = d->next)
67
anyReserveDisplays(void)
71
for (d = displays; d; d = d->next)
72
if ((d->displayType & d_lifetime) == dReserve)
78
idleReserveDisplays(void)
83
for (d = displays; d; d = d->next)
84
if (d->status == reserve)
90
startReserveDisplay(int lt)
92
struct display *d, *rd;
94
for (rd = 0, d = displays; d; d = d->next)
95
if (d->status == reserve)
99
rd->status = notRunning;
106
forEachDisplay( void (*f)( struct display * ) )
106
forEachDisplay(void (*f)(struct display *))
108
struct display *d, *next;
108
struct display *d, *next;
110
for (d = displays; d; d = next) {
110
for (d = displays; d; d = next) {
118
_forEachDisplayRev( struct display *d, void (*f)( struct display * ) )
118
_forEachDisplayRev(struct display *d, void (*f)(struct display *))
122
_forEachDisplayRev( d->next, f );
122
_forEachDisplayRev(d->next, f);
128
forEachDisplayRev( void (*f)( struct display * ) )
128
forEachDisplayRev(void (*f)(struct display *))
130
_forEachDisplayRev( displays, f );
130
_forEachDisplayRev(displays, f);
135
findDisplayByName( const char *name )
139
for (d = displays; d; d = d->next)
140
if (!strcmp( name, d->name ))
146
findDisplayByPid( int pid )
150
for (d = displays; d; d = d->next)
157
findDisplayByServerPid( int serverPid )
161
for (d = displays; d; d = d->next)
162
if (serverPid == d->serverPid)
135
findDisplayByName(const char *name)
139
for (d = displays; d; d = d->next)
140
if (!strcmp(name, d->name))
146
findDisplayByPid(int pid)
150
for (d = displays; d; d = d->next)
157
findDisplayByServerPid(int serverPid)
161
for (d = displays; d; d = d->next)
162
if (serverPid == d->serverPid)
170
findDisplayBySessionID( CARD32 sessionID )
170
findDisplayBySessionID(CARD32 sessionID)
174
for (d = displays; d; d = d->next)
175
if (sessionID == d->sessionID)
174
for (d = displays; d; d = d->next)
175
if (sessionID == d->sessionID)
181
findDisplayByAddress( XdmcpNetaddr addr, int addrlen, CARD16 displayNumber )
181
findDisplayByAddress(XdmcpNetaddr addr, int addrlen, CARD16 displayNumber)
185
for (d = displays; d; d = d->next)
186
if ((d->displayType & d_origin) == dFromXDMCP &&
187
d->displayNumber == displayNumber &&
188
addressEqual( (XdmcpNetaddr)d->from.data, d->from.length,
185
for (d = displays; d; d = d->next)
186
if ((d->displayType & d_origin) == dFromXDMCP &&
187
d->displayNumber == displayNumber &&
188
addressEqual((XdmcpNetaddr)d->from.data, d->from.length,
194
194
#endif /* XDMCP */
197
removeDisplay( struct display *old )
197
removeDisplay(struct display *old)
199
struct display *d, **dp;
199
struct display *d, **dp;
202
for (dp = &displays; (d = *dp); dp = &(*dp)->next) {
204
debug( "Removing display %s\n", d->name );
208
delStr( d->cfg.dep.name );
210
free( d->remoteHost );
212
if (d->authorizations) {
213
for (i = 0; i < d->authNum; i++)
214
XauDisposeAuth( d->authorizations[i] );
215
free( d->authorizations );
218
(void)unlink( d->authFile );
221
if (d->greeterAuthFile) {
222
(void)unlink( d->greeterAuthFile );
223
free( d->greeterAuthFile );
226
XdmcpDisposeARRAY8( &d->peer );
227
XdmcpDisposeARRAY8( &d->from );
228
XdmcpDisposeARRAY8( &d->clientAddr );
202
for (dp = &displays; (d = *dp); dp = &(*dp)->next) {
204
debug("Removing display %s\n", d->name);
208
delStr(d->cfg.dep.name);
212
if (d->authorizations) {
213
for (i = 0; i < d->authNum; i++)
214
XauDisposeAuth(d->authorizations[i]);
215
free(d->authorizations);
218
(void)unlink(d->authFile);
221
if (d->greeterAuthFile) {
222
(void)unlink(d->greeterAuthFile);
223
free(d->greeterAuthFile);
226
XdmcpDisposeARRAY8(&d->peer);
227
XdmcpDisposeARRAY8(&d->from);
228
XdmcpDisposeARRAY8(&d->clientAddr);
236
236
static struct disphist *
237
findHist( const char *name )
237
findHist(const char *name)
239
struct disphist *hstent;
239
struct disphist *hstent;
241
for (hstent = disphist; hstent; hstent = hstent->next)
242
if (!strcmp( hstent->name, name ))
241
for (hstent = disphist; hstent; hstent = hstent->next)
242
if (!strcmp(hstent->name, name))
248
newDisplay( const char *name )
248
newDisplay(const char *name)
251
struct disphist *hstent;
253
if (!(hstent = findHist( name ))) {
254
if (!(hstent = Calloc( 1, sizeof(*hstent) )))
256
if (!strDup( &hstent->name, name )) {
260
hstent->next = disphist; disphist = hstent;
263
if (!(d = Calloc( 1, sizeof(*d) )))
267
d->name = hstent->name;
268
/* initialize fields (others are 0) */
251
struct disphist *hstent;
253
if (!(hstent = findHist(name))) {
254
if (!(hstent = Calloc(1, sizeof(*hstent))))
256
if (!strDup(&hstent->name, name)) {
260
hstent->next = disphist;
264
if (!(d = Calloc(1, sizeof(*d))))
268
d->name = hstent->name;
269
/* initialize fields (others are 0) */
274
275
#ifndef SINGLE_PIPE
283
debug( "created new display %s\n", d->name );
284
debug("created new display %s\n", d->name);
288
displayName( struct display *d )
289
displayName(struct display *d)
290
return memcmp( d->name, "localhost:", 10 ) ? d->name : d->name + 9;
291
return memcmp(d->name, "localhost:", 10) ? d->name : d->name + 9;