aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2019-09-28 22:19:30 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2019-09-28 22:22:14 +0300
commit08702cab6c2312103f3f4515a64b54a3a176533e (patch)
treedd0fb013cb5b4859df69968cda46c22c2c3da547
parent5eacee72c0efd2a53cae8a4b2d03501cd067e532 (diff)
downloadproto-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.go3
-rw-r--r--main.go1
-rw-r--r--rcd.go22
3 files changed, 25 insertions, 1 deletions
diff --git a/depmap.go b/depmap.go
index 4ad9352..457dd95 100644
--- a/depmap.go
+++ b/depmap.go
@@ -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
diff --git a/main.go b/main.go
index 74b97e9..105c2a2 100644
--- a/main.go
+++ b/main.go
@@ -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
}
diff --git a/rcd.go b/rcd.go
index 39f1266..ad8c5fd 100644
--- a/rcd.go
+++ b/rcd.go
@@ -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() {

Return to:

Send suggestions and report system problems to the System administrator.