diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2019-09-28 22:19:30 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2019-09-28 22:22:14 +0300 |
commit | 08702cab6c2312103f3f4515a64b54a3a176533e (patch) | |
tree | dd0fb013cb5b4859df69968cda46c22c2c3da547 | |
parent | 5eacee72c0efd2a53cae8a4b2d03501cd067e532 (diff) | |
download | proto-08702cab6c2312103f3f4515a64b54a3a176533e.tar.gz proto-08702cab6c2312103f3f4515a64b54a3a176533e.tar.bz2 |
Bugfixes
* depmap.go (TraverseMatchingRows): Bugfix.
* main.go (Inc): Deregister the removed service.
* rcd.go (FindServiceIndex)
(DeregisterService): New functions.
-rw-r--r-- | depmap.go | 3 | ||||
-rw-r--r-- | main.go | 1 | ||||
-rw-r--r-- | rcd.go | 22 |
3 files changed, 25 insertions, 1 deletions
@@ -165,6 +165,7 @@ func (dm *Depmap) TraverseMatchingRows (n int) (DepmapIterator, error) { } i := 0 return func() (int, bool) { + nextrow: for i < dm.dim { k := i i++ @@ -173,7 +174,7 @@ func (dm *Depmap) TraverseMatchingRows (n int) (DepmapIterator, error) { } for j := 0; j < dm.dim; j++ { if dm.IsSet(k,j) != dm.IsSet(n,j) { - continue + continue nextrow } } return k, true @@ -593,6 +593,7 @@ func (rseq *RCSeq) Inc(newsrv Service) *FileOpList { // unlink it first. if opts.Defaults { oplist.Append(NewUnlink(oldsrv.FileName())) + rseq.DeregisterService(oldsrv) } else { return nil } @@ -47,6 +47,28 @@ func (seq *RCSeq) RegisterService(srv Service) (n int) { return } +func (seq *RCSeq) FindServiceIndex(name string) int { + for i, s := range seq.Service { + if name == s.BaseName() { + return i + } + } + return -1 +} + +func (seq *RCSeq) DeregisterService(srv Service) { + n := seq.FindServiceIndex(srv.BaseName()) + if (n == -1) { + return + } + for _, s := range srv.Provided() { + if i, found := seq.Symbols[s]; found && i == n { + delete(seq.Symbols, s) + } + } + seq.Service = append(seq.Service[0:n], seq.Service[n+1:]...) +} + // Registers all built-in services in the sequence SEQ. // FIXME: Not all built-in services are present in all runlevels. func (seq *RCSeq) RegisterBuiltinServices() { |