static int needsReScan( int what, CfgDep *dep ) { int widx, idx; long mt; for (widx = 0; cfgMapT[widx] != what; widx++); idx = cfgMap[widx]; if (checkDep( idx )) { if (!GetDeps()) return -1; idx = cfgMap[widx]; } mt = mTime( cfgFiles[idx].name->str ); if (dep->name != cfgFiles[idx].name) { if (dep->name) delStr( dep->name ); dep->name = cfgFiles[idx].name; dep->name->cnt++; dep->time = mt; return 1; } else if (dep->time != mt) { dep->time = mt; return 1; } else return 0; }
void RemoveDisplay(struct display *old) { struct display *d, **dp; int i; for(dp = &displays; (d = *dp); dp = &(*dp)->next) { if(d == old) { Debug("Removing display %s\n", d->name); *dp = d->next; IfFree(d->class2); IfFree(d->cfg.data); delStr(d->cfg.dep.name); #ifdef XDMCP IfFree(d->remoteHost); #endif if(d->authorizations) { for(i = 0; i < d->authNum; i++) XauDisposeAuth(d->authorizations[i]); free((char *)d->authorizations); } if(d->authFile) { (void)unlink(d->authFile); free(d->authFile); } IfFree(d->authNameLens); #ifdef XDMCP XdmcpDisposeARRAY8(&d->peer); XdmcpDisposeARRAY8(&d->from); XdmcpDisposeARRAY8(&d->clientAddr); #endif free((char *)d); break; } } }
static int GetDeps() { int ncf, i, dep, ret; CfgFile *cf; OpenGetter(); GSendInt( GC_Files ); ncf = GRecvInt(); if (!(cf = Malloc( ncf * sizeof(*cf) ))) { CloseGetter(); return 0; } for (i = 0; i < ncf; i++) { cf[i].name = newStr( GRecvStr() ); if ((dep = cf[i].depidx = GRecvInt()) != -1) cf[i].deptime = mTime( cf[dep].name->str ); } if (cfgFiles) { for (i = 0; i < numCfgFiles; i++) delStr( cfgFiles[i].name ); free( cfgFiles ); } ret = 1; cfgFiles = cf; numCfgFiles = ncf; for (i = 0; i < as(cfgMapT); i++) { GSendInt( cfgMapT[i] ); if ((cfgMap[i] = GRecvInt()) < 0) { LogError( "Config reader does not support config cathegory %#x\n", cfgMapT[i] ); ret = 0; } } GSendInt( -1 ); return ret; }