mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Initial s390-tools-2.0.0 import
This commit is based on the s390-tools-1.39.0 version. Changes on top of s390-tools-1.39.0: - Add MIT license to all source files - Add LICENSE file - Transform REAMDE to README.md (markdown) - Add AUTHORS.md file - Add CONTRIBUTING.md file - Move changelog from README to CHANGELOG.md file Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
This commit is contained in:
138
ipl_tools/system.c
Normal file
138
ipl_tools/system.c
Normal file
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* ipl_tools - Linux for System z reipl and shutdown tools
|
||||
*
|
||||
* Shared system functions
|
||||
*
|
||||
* Copyright IBM Corp. 2008, 2017
|
||||
*
|
||||
* s390-tools is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the MIT license. See LICENSE for details.
|
||||
*/
|
||||
|
||||
#include "ipl_tools.h"
|
||||
|
||||
/*
|
||||
* Check if we are running in an LPAR environment
|
||||
*/
|
||||
int is_lpar(void)
|
||||
{
|
||||
size_t bytes_read;
|
||||
char buf[2048];
|
||||
int rc = 0;
|
||||
FILE *fh;
|
||||
|
||||
fh = fopen("/proc/cpuinfo", "r");
|
||||
if (fh == NULL)
|
||||
ERR_EXIT_ERRNO("Could not open \"/proc/cpuinfo\"");
|
||||
bytes_read = fread(buf, 1, sizeof(buf), fh);
|
||||
if (bytes_read == 0)
|
||||
ERR_EXIT("Could not read \"/proc/cpuinfo\"");
|
||||
buf[bytes_read] = '\0';
|
||||
if (strstr(buf, "version = FF") == NULL)
|
||||
rc = 1;
|
||||
fclose(fh);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether we are started as root
|
||||
*/
|
||||
int is_root(void)
|
||||
{
|
||||
if (geteuid() == 0)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a string to lower case
|
||||
*/
|
||||
void strlow(char *s)
|
||||
{
|
||||
while (*s) {
|
||||
*s = tolower(*s);
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a string from a particular file
|
||||
*/
|
||||
void read_str(char *string, const char *path, size_t len)
|
||||
{
|
||||
size_t rc;
|
||||
FILE *fh;
|
||||
|
||||
fh = fopen(path, "rb");
|
||||
if (fh == NULL)
|
||||
ERR_EXIT_ERRNO("Could not open \"%s\"", path);
|
||||
rc = fread(string, 1, len - 1, fh);
|
||||
if (rc == 0 && ferror(fh))
|
||||
ERR_EXIT_ERRNO("Could not read \"%s\"", path);
|
||||
fclose(fh);
|
||||
string[rc] = 0;
|
||||
if (string[strlen(string) - 1] == '\n')
|
||||
string[strlen(string) - 1] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a string from a particular /sys/firmware file
|
||||
*/
|
||||
void read_fw_str(char *string, const char *file, size_t len)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
snprintf(path, sizeof(path), "/sys/firmware/%s", file);
|
||||
return read_str(string, path, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print content of a file (path = dir/file)
|
||||
*/
|
||||
void print_fw_str(const char *fmt, const char *dir, const char *file)
|
||||
{
|
||||
char path[PATH_MAX], str[4096];
|
||||
|
||||
snprintf(path, sizeof(path), "%s/%s", dir, file);
|
||||
read_fw_str(str, path, sizeof(str));
|
||||
printf(fmt, str);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write a string to a file
|
||||
*/
|
||||
void write_str(char *string, char *file)
|
||||
{
|
||||
char path[PATH_MAX], value[4096];
|
||||
int fh;
|
||||
|
||||
snprintf(value, sizeof(value), "%s\n", string);
|
||||
snprintf(path, sizeof(path), "/sys/firmware/%s", file);
|
||||
fh = open(path, O_WRONLY);
|
||||
if (fh < 0)
|
||||
ERR_EXIT_ERRNO("Could not open \"%s\"", file);
|
||||
if (write(fh, value, strlen(value)) < 0)
|
||||
ERR_EXIT_ERRNO("Could not set \"%s\"", file);
|
||||
close(fh);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write a string to a file and return ERRNO
|
||||
*/
|
||||
int write_str_errno(char *string, char *file)
|
||||
{
|
||||
char path[PATH_MAX], value[4096];
|
||||
int fh;
|
||||
|
||||
snprintf(value, sizeof(value), "%s\n", string);
|
||||
snprintf(path, sizeof(path), "/sys/firmware/%s", file);
|
||||
fh = open(path, O_WRONLY);
|
||||
if (fh < 0)
|
||||
ERR_EXIT_ERRNO("Could not open \"%s\"", file);
|
||||
if (write(fh, value, strlen(value)) < 0)
|
||||
return errno;
|
||||
close(fh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user