properly handling the case where SRC is a substring of DST.
Variables are as defined by GETENV. Supports $var and ${var}
syntaxes; $$ substitutes as $. */
-void
+void
fn_interp_vars (struct substring src, const char *(*getenv) (const char *),
struct string *dst_)
{
int c;
while ((c = ss_get_char (&src)) != EOF)
- if (c != '$')
+ if (c != '$')
ds_put_char (&dst, c);
else
{
ds_truncate (&dst, start);
ds_put_cstr (&dst, value);
- }
+ }
}
ds_swap (&dst, dst_);
If FILE_NAME does not have an extension, returns an empty
string. */
char *
-fn_extension (const char *file_name)
+fn_extension (const char *file_name)
{
const char *extension = strrchr (file_name, '.');
if (extension == NULL)
{
assert (mode[0] == 'r' || mode[0] == 'w');
- if (mode[0] == 'r' && (!strcmp (fn, "stdin") || !strcmp (fn, "-")))
+ if (mode[0] == 'r' && (!strcmp (fn, "stdin") || !strcmp (fn, "-")))
return stdin;
else if (mode[0] == 'w' && (!strcmp (fn, "stdout") || !strcmp (fn, "-")))
return stdout;
else if (mode[0] == 'w' && !strcmp (fn, "stderr"))
return stderr;
-
+
#if HAVE_POPEN
if (fn[0] == '|')
{
if (get_safer_mode ())
return safety_violation (fn);
-
+
s = local_alloc (strlen (fn));
memcpy (s, fn, strlen (fn) - 1);
s[strlen (fn) - 1] = 0;
-
+
f = popen (s, mode);
local_free (s);
#if !(defined _WIN32 || defined __WIN32__)
/* A file's identity. */
-struct file_identity
+struct file_identity
{
dev_t device; /* Device number. */
ino_t inode; /* Inode number. */
same file. Returns a null pointer if no information about the
file is available, perhaps because it does not exist. The
caller is responsible for freeing the structure with
- fn_free_identity() when finished. */
+ fn_free_identity() when finished. */
struct file_identity *
-fn_get_identity (const char *file_name)
+fn_get_identity (const char *file_name)
{
struct stat s;
- if (stat (file_name, &s) == 0)
+ if (stat (file_name, &s) == 0)
{
struct file_identity *identity = xmalloc (sizeof *identity);
identity->device = s.st_dev;
/* Frees IDENTITY obtained from fn_get_identity(). */
void
-fn_free_identity (struct file_identity *identity)
+fn_free_identity (struct file_identity *identity)
{
free (identity);
}
/* Compares A and B, returning a strcmp()-type result. */
int
fn_compare_file_identities (const struct file_identity *a,
- const struct file_identity *b)
+ const struct file_identity *b)
{
assert (a != NULL);
assert (b != NULL);
}
#else /* Windows */
/* A file's identity. */
-struct file_identity
+struct file_identity
{
char *normalized_file_name; /* File's normalized name. */
};
same file. Returns a null pointer if no information about the
file is available, perhaps because it does not exist. The
caller is responsible for freeing the structure with
- fn_free_identity() when finished. */
+ fn_free_identity() when finished. */
struct file_identity *
-fn_get_identity (const char *file_name)
+fn_get_identity (const char *file_name)
{
struct file_identity *identity = xmalloc (sizeof *identity);
char cname[PATH_MAX];
/* Frees IDENTITY obtained from fn_get_identity(). */
void
-fn_free_identity (struct file_identity *identity)
+fn_free_identity (struct file_identity *identity)
{
- if (identity != NULL)
+ if (identity != NULL)
{
free (identity->normalized_file_name);
free (identity);
/* Compares A and B, returning a strcmp()-type result. */
int
fn_compare_file_identities (const struct file_identity *a,
- const struct file_identity *b)
+ const struct file_identity *b)
{
return strcasecmp (a->normalized_file_name, b->normalized_file_name);
}