util-lib: move fstab_node_to_udev_node() to fstab-util.[ch]
This commit is contained in:
parent
0d39fa9c69
commit
6550203eb4
|
@ -21,5 +21,7 @@
|
|||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
int encode_devnode_name(const char *str, char *str_enc, size_t len);
|
||||
int whitelisted_char_for_devnode(char c, const char *additional);
|
||||
|
|
|
@ -571,26 +571,6 @@ int touch(const char *path) {
|
|||
return touch_file(path, false, USEC_INFINITY, UID_INVALID, GID_INVALID, 0);
|
||||
}
|
||||
|
||||
static char *unquote(const char *s, const char* quotes) {
|
||||
size_t l;
|
||||
assert(s);
|
||||
|
||||
/* This is rather stupid, simply removes the heading and
|
||||
* trailing quotes if there is one. Doesn't care about
|
||||
* escaping or anything.
|
||||
*
|
||||
* DON'T USE THIS FOR NEW CODE ANYMORE!*/
|
||||
|
||||
l = strlen(s);
|
||||
if (l < 2)
|
||||
return strdup(s);
|
||||
|
||||
if (strchr(quotes, s[0]) && s[l-1] == s[0])
|
||||
return strndup(s+1, l-2);
|
||||
|
||||
return strdup(s);
|
||||
}
|
||||
|
||||
noreturn void freeze(void) {
|
||||
|
||||
/* Make sure nobody waits for us on a socket anymore */
|
||||
|
@ -636,43 +616,6 @@ int null_or_empty_fd(int fd) {
|
|||
return null_or_empty(&st);
|
||||
}
|
||||
|
||||
static char *tag_to_udev_node(const char *tagvalue, const char *by) {
|
||||
_cleanup_free_ char *t = NULL, *u = NULL;
|
||||
size_t enc_len;
|
||||
|
||||
u = unquote(tagvalue, QUOTES);
|
||||
if (!u)
|
||||
return NULL;
|
||||
|
||||
enc_len = strlen(u) * 4 + 1;
|
||||
t = new(char, enc_len);
|
||||
if (!t)
|
||||
return NULL;
|
||||
|
||||
if (encode_devnode_name(u, t, enc_len) < 0)
|
||||
return NULL;
|
||||
|
||||
return strjoin("/dev/disk/by-", by, "/", t, NULL);
|
||||
}
|
||||
|
||||
char *fstab_node_to_udev_node(const char *p) {
|
||||
assert(p);
|
||||
|
||||
if (startswith(p, "LABEL="))
|
||||
return tag_to_udev_node(p+6, "label");
|
||||
|
||||
if (startswith(p, "UUID="))
|
||||
return tag_to_udev_node(p+5, "uuid");
|
||||
|
||||
if (startswith(p, "PARTUUID="))
|
||||
return tag_to_udev_node(p+9, "partuuid");
|
||||
|
||||
if (startswith(p, "PARTLABEL="))
|
||||
return tag_to_udev_node(p+10, "partlabel");
|
||||
|
||||
return strdup(p);
|
||||
}
|
||||
|
||||
bool dirent_is_file(const struct dirent *de) {
|
||||
assert(de);
|
||||
|
||||
|
|
|
@ -199,8 +199,6 @@ bool null_or_empty(struct stat *st) _pure_;
|
|||
int null_or_empty_path(const char *fn);
|
||||
int null_or_empty_fd(int fd);
|
||||
|
||||
char *fstab_node_to_udev_node(const char *p);
|
||||
|
||||
void execute_directories(const char* const* directories, usec_t timeout, char *argv[]);
|
||||
|
||||
bool plymouth_running(void);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "fstab-util.h"
|
||||
#include "log.h"
|
||||
#include "mkdir.h"
|
||||
#include "special.h"
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "device-nodes.h"
|
||||
#include "fstab-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
|
@ -196,3 +197,60 @@ int fstab_find_pri(const char *options, int *ret) {
|
|||
*ret = (int) pri;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static char *unquote(const char *s, const char* quotes) {
|
||||
size_t l;
|
||||
assert(s);
|
||||
|
||||
/* This is rather stupid, simply removes the heading and
|
||||
* trailing quotes if there is one. Doesn't care about
|
||||
* escaping or anything.
|
||||
*
|
||||
* DON'T USE THIS FOR NEW CODE ANYMORE!*/
|
||||
|
||||
l = strlen(s);
|
||||
if (l < 2)
|
||||
return strdup(s);
|
||||
|
||||
if (strchr(quotes, s[0]) && s[l-1] == s[0])
|
||||
return strndup(s+1, l-2);
|
||||
|
||||
return strdup(s);
|
||||
}
|
||||
|
||||
static char *tag_to_udev_node(const char *tagvalue, const char *by) {
|
||||
_cleanup_free_ char *t = NULL, *u = NULL;
|
||||
size_t enc_len;
|
||||
|
||||
u = unquote(tagvalue, QUOTES);
|
||||
if (!u)
|
||||
return NULL;
|
||||
|
||||
enc_len = strlen(u) * 4 + 1;
|
||||
t = new(char, enc_len);
|
||||
if (!t)
|
||||
return NULL;
|
||||
|
||||
if (encode_devnode_name(u, t, enc_len) < 0)
|
||||
return NULL;
|
||||
|
||||
return strjoin("/dev/disk/by-", by, "/", t, NULL);
|
||||
}
|
||||
|
||||
char *fstab_node_to_udev_node(const char *p) {
|
||||
assert(p);
|
||||
|
||||
if (startswith(p, "LABEL="))
|
||||
return tag_to_udev_node(p+6, "label");
|
||||
|
||||
if (startswith(p, "UUID="))
|
||||
return tag_to_udev_node(p+5, "uuid");
|
||||
|
||||
if (startswith(p, "PARTUUID="))
|
||||
return tag_to_udev_node(p+9, "partuuid");
|
||||
|
||||
if (startswith(p, "PARTLABEL="))
|
||||
return tag_to_udev_node(p+10, "partlabel");
|
||||
|
||||
return strdup(p);
|
||||
}
|
||||
|
|
|
@ -23,11 +23,12 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "macro.h"
|
||||
|
||||
bool fstab_is_mount_point(const char *mount);
|
||||
int fstab_filter_options(const char *opts, const char *names,
|
||||
const char **namefound, char **value, char **filtered);
|
||||
|
||||
int fstab_filter_options(const char *opts, const char *names, const char **namefound, char **value, char **filtered);
|
||||
|
||||
int fstab_extract_values(const char *opts, const char *name, char ***values);
|
||||
|
||||
|
@ -49,3 +50,5 @@ static inline bool fstab_test_yes_no_option(const char *opts, const char *yes_no
|
|||
|
||||
return opt == yes_no;
|
||||
}
|
||||
|
||||
char *fstab_node_to_udev_node(const char *p);
|
||||
|
|
|
@ -37,9 +37,10 @@
|
|||
#include "escape.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fstab-util.h"
|
||||
#include "hexdecoct.h"
|
||||
#include "io-util.h"
|
||||
#include "mkdir.h"
|
||||
#include "hexdecoct.h"
|
||||
#include "parse-util.h"
|
||||
#include "process-util.h"
|
||||
#include "rm-rf.h"
|
||||
|
|
Loading…
Reference in New Issue