lib/strutils: add strappend()
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
8420463b6d
commit
2e03758dc5
6 changed files with 31 additions and 42 deletions
|
@ -382,6 +382,9 @@ extern char *strnconcat(const char *s, const char *suffix, size_t b);
|
||||||
extern char *strconcat(const char *s, const char *suffix);
|
extern char *strconcat(const char *s, const char *suffix);
|
||||||
extern char *strfconcat(const char *s, const char *format, ...)
|
extern char *strfconcat(const char *s, const char *format, ...)
|
||||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||||
|
|
||||||
|
extern int strappend(char **a, const char *b);
|
||||||
|
|
||||||
extern const char *split(const char **state, size_t *l, const char *separator, int quoted);
|
extern const char *split(const char **state, size_t *l, const char *separator, int quoted);
|
||||||
|
|
||||||
extern int skip_fline(FILE *fp);
|
extern int skip_fline(FILE *fp);
|
||||||
|
|
|
@ -992,6 +992,31 @@ char *strfconcat(const char *s, const char *format, ...)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int strappend(char **a, const char *b)
|
||||||
|
{
|
||||||
|
size_t al, bl;
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
if (!a)
|
||||||
|
return -EINVAL;
|
||||||
|
if (!b || !*b)
|
||||||
|
return 0;
|
||||||
|
if (!*a) {
|
||||||
|
*a = strdup(b);
|
||||||
|
return !*a ? -ENOMEM : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
al = strlen(*a);
|
||||||
|
bl = strlen(b);
|
||||||
|
|
||||||
|
tmp = realloc(*a, al + bl + 1);
|
||||||
|
if (!tmp)
|
||||||
|
return -ENOMEM;
|
||||||
|
*a = tmp;
|
||||||
|
memcpy((*a) + al, b, bl + 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static size_t strcspn_escaped(const char *s, const char *reject)
|
static size_t strcspn_escaped(const char *s, const char *reject)
|
||||||
{
|
{
|
||||||
int escaped = 0;
|
int escaped = 0;
|
||||||
|
|
|
@ -1369,7 +1369,7 @@ int mnt_fs_append_comment(struct libmnt_fs *fs, const char *comm)
|
||||||
if (!fs)
|
if (!fs)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return append_string(&fs->comment, comm);
|
return strappend(&fs->comment, comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -95,7 +95,6 @@ extern int mnt_run_test(struct libmnt_test *tests, int argc, char *argv[]);
|
||||||
|
|
||||||
/* utils.c */
|
/* utils.c */
|
||||||
extern int mnt_valid_tagname(const char *tagname);
|
extern int mnt_valid_tagname(const char *tagname);
|
||||||
extern int append_string(char **a, const char *b);
|
|
||||||
|
|
||||||
extern const char *mnt_statfs_get_fstype(struct statfs *vfs);
|
extern const char *mnt_statfs_get_fstype(struct statfs *vfs);
|
||||||
extern int is_file_empty(const char *name);
|
extern int is_file_empty(const char *name);
|
||||||
|
|
|
@ -309,7 +309,7 @@ int mnt_table_append_intro_comment(struct libmnt_table *tb, const char *comm)
|
||||||
{
|
{
|
||||||
if (!tb)
|
if (!tb)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return append_string(&tb->comm_intro, comm);
|
return strappend(&tb->comm_intro, comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -350,7 +350,7 @@ int mnt_table_append_trailing_comment(struct libmnt_table *tb, const char *comm)
|
||||||
{
|
{
|
||||||
if (!tb)
|
if (!tb)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return append_string(&tb->comm_tail, comm);
|
return strappend(&tb->comm_tail, comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,31 +32,6 @@
|
||||||
#include "statfs_magic.h"
|
#include "statfs_magic.h"
|
||||||
#include "sysfs.h"
|
#include "sysfs.h"
|
||||||
|
|
||||||
int append_string(char **a, const char *b)
|
|
||||||
{
|
|
||||||
size_t al, bl;
|
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
assert(a);
|
|
||||||
|
|
||||||
if (!b || !*b)
|
|
||||||
return 0;
|
|
||||||
if (!*a) {
|
|
||||||
*a = strdup(b);
|
|
||||||
return !*a ? -ENOMEM : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
al = strlen(*a);
|
|
||||||
bl = strlen(b);
|
|
||||||
|
|
||||||
tmp = realloc(*a, al + bl + 1);
|
|
||||||
if (!tmp)
|
|
||||||
return -ENOMEM;
|
|
||||||
*a = tmp;
|
|
||||||
memcpy((*a) + al, b, bl + 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return 1 if the file is not accessible or empty
|
* Return 1 if the file is not accessible or empty
|
||||||
*/
|
*/
|
||||||
|
@ -1205,18 +1180,6 @@ static int test_endswith(struct libmnt_test *ts, int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int test_appendstr(struct libmnt_test *ts, int argc, char *argv[])
|
|
||||||
{
|
|
||||||
char *str = strdup(argv[1]);
|
|
||||||
const char *ap = argv[2];
|
|
||||||
|
|
||||||
append_string(&str, ap);
|
|
||||||
printf("new string: '%s'\n", str);
|
|
||||||
|
|
||||||
free(str);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int test_mountpoint(struct libmnt_test *ts, int argc, char *argv[])
|
static int test_mountpoint(struct libmnt_test *ts, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *path = canonicalize_path(argv[1]),
|
char *path = canonicalize_path(argv[1]),
|
||||||
|
@ -1343,7 +1306,6 @@ int main(int argc, char *argv[])
|
||||||
{ "--filesystems", test_filesystems, "[<pattern>] list /{etc,proc}/filesystems" },
|
{ "--filesystems", test_filesystems, "[<pattern>] list /{etc,proc}/filesystems" },
|
||||||
{ "--starts-with", test_startswith, "<string> <prefix>" },
|
{ "--starts-with", test_startswith, "<string> <prefix>" },
|
||||||
{ "--ends-with", test_endswith, "<string> <prefix>" },
|
{ "--ends-with", test_endswith, "<string> <prefix>" },
|
||||||
{ "--append-string", test_appendstr, "<string> <appendix>" },
|
|
||||||
{ "--mountpoint", test_mountpoint, "<path>" },
|
{ "--mountpoint", test_mountpoint, "<path>" },
|
||||||
{ "--cd-parent", test_chdir, "<path>" },
|
{ "--cd-parent", test_chdir, "<path>" },
|
||||||
{ "--kernel-cmdline",test_kernel_cmdline, "<option> | <option>=" },
|
{ "--kernel-cmdline",test_kernel_cmdline, "<option> | <option>=" },
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue