Update github.com/coreos/go-systemd to v22.5.0

This commit is contained in:
Ciprian Hacman
2023-09-20 07:13:42 +03:00
parent ed94dff2cd
commit fdd522a951
12 changed files with 117 additions and 11 deletions
@@ -0,0 +1,57 @@
// Copyright 2015 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//go:build linux
// +build linux
package dlopen
// #include <string.h>
// #include <stdlib.h>
//
// int
// my_strlen(void *f, const char *s)
// {
// size_t (*strlen)(const char *);
//
// strlen = (size_t (*)(const char *))f;
// return strlen(s);
// }
import "C"
import (
"fmt"
"unsafe"
)
func strlen(libs []string, s string) (int, error) {
h, err := GetHandle(libs)
if err != nil {
return -1, fmt.Errorf(`couldn't get a handle to the library: %v`, err)
}
defer h.Close()
f := "strlen"
cs := C.CString(s)
defer C.free(unsafe.Pointer(cs))
strlen, err := h.GetSymbolPointer(f)
if err != nil {
return -1, fmt.Errorf(`couldn't get symbol %q: %v`, f, err)
}
len := C.my_strlen(strlen, cs)
return int(len), nil
}
@@ -16,7 +16,7 @@
package sdjournal
import (
"github.com/coreos/go-systemd/internal/dlopen"
"github.com/coreos/go-systemd/v22/internal/dlopen"
"sync"
"unsafe"
)
@@ -300,6 +300,24 @@ package sdjournal
// return sd_journal_get_catalog(j, ret);
// }
//
// int
// my_sd_id128_get_boot(void *f, sd_id128_t *boot_id)
// {
// int(*sd_id128_get_boot)(sd_id128_t *);
//
// sd_id128_get_boot = f;
// return sd_id128_get_boot(boot_id);
// }
//
// char *
// my_sd_id128_to_string(void *f, sd_id128_t boot_id, char s[SD_ID128_STRING_MAX])
// {
// char *(*sd_id128_to_string)(sd_id128_t, char *);
//
// sd_id128_to_string = f;
// return sd_id128_to_string(boot_id, s);
// }
//
import "C"
import (
"bytes"
@@ -928,7 +946,7 @@ func (j *Journal) SeekHead() error {
}
// SeekTail may be used to seek to the end of the journal, i.e. the most recent
// available entry. This call must be followed by a call to Next before any
// available entry. This call must be followed by a call to Previous before any
// call to Get* will return data about the last element.
func (j *Journal) SeekTail() error {
sd_journal_seek_tail, err := getFunction("sd_journal_seek_tail")
@@ -1118,3 +1136,34 @@ func (j *Journal) GetCatalog() (string, error) {
return catalog, nil
}
// GetBootID get systemd boot id
func (j *Journal) GetBootID() (string, error) {
sd_id128_get_boot, err := getFunction("sd_id128_get_boot")
if err != nil {
return "", err
}
var boot_id C.sd_id128_t
r := C.my_sd_id128_get_boot(sd_id128_get_boot, &boot_id)
if r < 0 {
return "", fmt.Errorf("failed to get boot id: %s", syscall.Errno(-r).Error())
}
sd_id128_to_string, err := getFunction("sd_id128_to_string")
if err != nil {
return "", err
}
id128StringMax := C.size_t(C.SD_ID128_STRING_MAX)
c := (*C.char)(C.malloc(id128StringMax))
defer C.free(unsafe.Pointer(c))
C.my_sd_id128_to_string(sd_id128_to_string, boot_id, c)
bootID := C.GoString(c)
if len(bootID) <= 0 {
return "", fmt.Errorf("get boot id %s is not valid", bootID)
}
return bootID, nil
}