1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-08 17:22:05 +03:00

New module 'xconcat-filename', split off from module 'concat-filename'.

This commit is contained in:
Bruno Haible
2008-09-02 01:34:21 +02:00
parent be6c2737cc
commit 27dbed51f8
13 changed files with 196 additions and 88 deletions

View File

@@ -1,3 +1,33 @@
2008-09-01 Bruno Haible <bruno@clisp.org>
Split module 'concat-filename' into 'concat-filename' (LGPL) and
'xconcat-filename' (GPL).
* modules/concat-filename (Depends-on): Add malloc-posix, remove xalloc.
(License): Change to LGPLv2+.
* modules/xconcat-filename: New file.
* lib/concat-filename.h (concatenated_filename): Change specification.
(xconcatenated_filename): New declaration.
* lib/concat-filename.c: Include errno.h, stdlib.h, not xalloc.h.
(concatenated_filename): Use malloc instead of xalloc. Handle out-of-
memory situations.
* lib/xconcat-filename.c: New file.
* NEWS: Mention the change.
* lib/findprog.c: Include concat-filename.h, not filename.h.
(find_in_path): Use xconcatenated_filename instead of
concatenated_filename.
* lib/javacomp.c: Include concat-filename.h, not filename.h.
(is_envjavac_gcj43_usable, is_envjavac_oldgcj_14_14_usable,
is_envjavac_oldgcj_14_13_usable, is_envjavac_nongcj_usable,
is_gcj_present, is_gcj43_usable, is_oldgcj_14_14_usable,
is_oldgcj_14_13_usable, is_javac_usable): Use xconcatenated_filename
instead of concatenated_filename.
* lib/javaexec.c: Include concat-filename.h, not filename.h.
(execute_java_class): Use xconcatenated_filename instead of
concatenated_filename.
* modules/findprog (Depends-on): Add xconcat-filename, remove filename.
* modules/javacomp (Depends-on): Likewise.
* modules/javaexec (Depends-on): Likewise.
2008-09-01 Bruno Haible <bruno@clisp.org>
Split module 'filename' into 'filename' and 'concat-filename'.

7
NEWS
View File

@@ -7,9 +7,10 @@ User visible incompatible changes
Date Modules Changes
2008-09-01 filename The module does not define the function
concatenated_filename any more. To get this
function, use module 'concat-filename' and the
include file "concat-filename.h".
concatenated_filename any more. To get an
equivalent function, use function
xconcatenated_filename from module
'xconcat-filename'.
2008-08-31 havelib On Solaris, when searching for 64-bit mode
libraries the directory $prefix/lib is now ignored.

View File

@@ -21,15 +21,17 @@
/* Specification. */
#include "concat-filename.h"
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "filename.h"
#include "xalloc.h"
/* Concatenate a directory filename, a relative filename and an optional
suffix. The directory may end with the directory separator. The second
argument may not start with the directory separator (it is relative).
Return a freshly allocated filename. */
Return a freshly allocated filename. Return NULL and set errno
upon memory allocation failure. */
char *
concatenated_filename (const char *directory, const char *filename,
const char *suffix)
@@ -40,10 +42,11 @@ concatenated_filename (const char *directory, const char *filename,
if (strcmp (directory, ".") == 0)
{
/* No need to prepend the directory. */
result = XNMALLOC (strlen (filename)
+ (suffix != NULL ? strlen (suffix) : 0)
+ 1,
char);
result = (char *) malloc (strlen (filename)
+ (suffix != NULL ? strlen (suffix) : 0)
+ 1);
if (result == NULL)
return NULL; /* errno is set here */
p = result;
}
else
@@ -52,11 +55,12 @@ concatenated_filename (const char *directory, const char *filename,
int need_slash =
(directory_len > FILE_SYSTEM_PREFIX_LEN (directory)
&& !ISSLASH (directory[directory_len - 1]));
result = XNMALLOC (directory_len + need_slash
+ strlen (filename)
+ (suffix != NULL ? strlen (suffix) : 0)
+ 1,
char);
result = (char *) malloc (directory_len + need_slash
+ strlen (filename)
+ (suffix != NULL ? strlen (suffix) : 0)
+ 1);
if (result == NULL)
return NULL; /* errno is set here */
memcpy (result, directory, directory_len);
p = result + directory_len;
if (need_slash)

View File

@@ -23,10 +23,16 @@ extern "C" {
/* Concatenate a directory filename, a relative filename and an optional
suffix. Return a freshly allocated filename. */
suffix. Return a freshly allocated filename. Return NULL and set errno
upon memory allocation failure. */
extern char *concatenated_filename (const char *directory,
const char *filename, const char *suffix);
/* Concatenate a directory filename, a relative filename and an optional
suffix. Return a freshly allocated filename. */
extern char *xconcatenated_filename (const char *directory,
const char *filename, const char *suffix);
#ifdef __cplusplus
}

View File

@@ -1,5 +1,5 @@
/* Locating a program in PATH.
Copyright (C) 2001-2004, 2006-2007 Free Software Foundation, Inc.
Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
@@ -27,7 +27,7 @@
#include <unistd.h>
#include "xalloc.h"
#include "filename.h"
#include "concat-filename.h"
const char *
@@ -75,7 +75,7 @@ find_in_path (const char *progname)
dir = ".";
/* Concatenate dir and progname. */
progpathname = concatenated_filename (dir, progname, NULL);
progpathname = xconcatenated_filename (dir, progname, NULL);
/* On systems which have the eaccess() system call, let's use it.
On other systems, let's hope that this program is not installed
@@ -88,7 +88,7 @@ find_in_path (const char *progname)
{
free (progpathname);
/* Add the "./" prefix for real, that concatenated_filename()
/* Add the "./" prefix for real, that xconcatenated_filename()
optimized away. This avoids a second PATH search when the
caller uses execlp/execvp. */
progpathname = XNMALLOC (2 + strlen (progname) + 1, char);

View File

@@ -41,7 +41,7 @@
#include "safe-read.h"
#include "xalloc.h"
#include "xmalloca.h"
#include "filename.h"
#include "concat-filename.h"
#include "fwriteerror.h"
#include "clean-temp.h"
#include "error.h"
@@ -741,7 +741,7 @@ is_envjavac_gcj43_usable (const char *javac,
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet (source_version)))
{
@@ -751,7 +751,7 @@ is_envjavac_gcj43_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -785,9 +785,9 @@ is_envjavac_gcj43_usable (const char *javac,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name, failcode))
{
free (conftest_file_name);
@@ -797,9 +797,9 @@ is_envjavac_gcj43_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -890,7 +890,7 @@ is_envjavac_oldgcj_14_14_usable (const char *javac, bool *usablep)
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet ("1.4")))
{
@@ -900,7 +900,7 @@ is_envjavac_oldgcj_14_14_usable (const char *javac, bool *usablep)
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -951,7 +951,7 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet ("1.3")))
{
@@ -961,7 +961,7 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -994,8 +994,8 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
if (javac_works && javac_noassert_works)
{
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name, "conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_failcode_snippet ("1.3")))
{
@@ -1006,8 +1006,8 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name, "conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1091,7 +1091,7 @@ is_envjavac_nongcj_usable (const char *javac,
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet (source_version)))
{
@@ -1101,7 +1101,7 @@ is_envjavac_nongcj_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1135,9 +1135,9 @@ is_envjavac_nongcj_usable (const char *javac,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name, failcode))
{
free (conftest_file_name);
@@ -1147,9 +1147,9 @@ is_envjavac_nongcj_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1219,9 +1219,9 @@ is_envjavac_nongcj_usable (const char *javac,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name,
failcode))
{
@@ -1233,9 +1233,9 @@ is_envjavac_nongcj_usable (const char *javac,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1387,8 +1387,8 @@ is_gcj_present (void)
char *conftest_file_name;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftestlib.java",
NULL);
xconcatenated_filename (tmpdir->dir_name, "conftestlib.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name,
"public class conftestlib {\n"
" public static void main (String[] args) {\n"
@@ -1401,9 +1401,9 @@ is_gcj_present (void)
const char *java_sources[1];
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestlib.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestlib.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1531,7 +1531,7 @@ is_gcj43_usable (const char *source_version,
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet (source_version)))
{
@@ -1541,7 +1541,7 @@ is_gcj43_usable (const char *source_version,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1571,9 +1571,9 @@ is_gcj43_usable (const char *source_version,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name, failcode))
{
free (conftest_file_name);
@@ -1582,9 +1582,9 @@ is_gcj43_usable (const char *source_version,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1670,7 +1670,7 @@ is_oldgcj_14_14_usable (bool *usablep)
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet ("1.4")))
{
@@ -1680,7 +1680,7 @@ is_oldgcj_14_14_usable (bool *usablep)
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1727,7 +1727,7 @@ is_oldgcj_14_13_usable (bool *usablep, bool *need_no_assert_option_p)
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet ("1.3")))
{
@@ -1737,7 +1737,7 @@ is_oldgcj_14_13_usable (bool *usablep, bool *need_no_assert_option_p)
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1835,7 +1835,7 @@ is_javac_usable (const char *source_version, const char *target_version,
return true;
conftest_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL);
if (write_temp_file (tmpdir, conftest_file_name,
get_goodcode_snippet (source_version)))
{
@@ -1845,7 +1845,7 @@ is_javac_usable (const char *source_version, const char *target_version,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1878,9 +1878,9 @@ is_javac_usable (const char *source_version, const char *target_version,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name, failcode))
{
free (conftest_file_name);
@@ -1889,9 +1889,9 @@ is_javac_usable (const char *source_version, const char *target_version,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;
@@ -1959,9 +1959,9 @@ is_javac_usable (const char *source_version, const char *target_version,
free (conftest_file_name);
conftest_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.java",
NULL);
if (write_temp_file (tmpdir, conftest_file_name,
failcode))
{
@@ -1971,9 +1971,9 @@ is_javac_usable (const char *source_version, const char *target_version,
}
compiled_file_name =
concatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
xconcatenated_filename (tmpdir->dir_name,
"conftestfail.class",
NULL);
register_temp_file (tmpdir, compiled_file_name);
java_sources[0] = conftest_file_name;

View File

@@ -29,7 +29,7 @@
#include "classpath.h"
#include "xsetenv.h"
#include "sh-quote.h"
#include "filename.h"
#include "concat-filename.h"
#include "xalloc.h"
#include "xmalloca.h"
#include "error.h"
@@ -94,7 +94,7 @@ execute_java_class (const char *class_name,
/* First, try a class compiled to a native code executable. */
if (exe_dir != NULL)
{
char *exe_pathname = concatenated_filename (exe_dir, class_name, EXEEXT);
char *exe_pathname = xconcatenated_filename (exe_dir, class_name, EXEEXT);
char *old_classpath;
char **argv = (char **) xmalloca ((1 + nargs + 1) * sizeof (char *));
unsigned int i;

41
lib/xconcat-filename.c Normal file
View File

@@ -0,0 +1,41 @@
/* Construct a full filename from a directory and a relative filename.
Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <haible@clisp.cons.org>. */
#include <config.h>
/* Specification. */
#include "concat-filename.h"
#include "xalloc.h"
/* Concatenate a directory filename, a relative filename and an optional
suffix. The directory may end with the directory separator. The second
argument may not start with the directory separator (it is relative).
Return a freshly allocated filename. */
char *
xconcatenated_filename (const char *directory, const char *filename,
const char *suffix)
{
char *result;
result = concatenated_filename (directory, filename, suffix);
if (result == NULL)
xalloc_die ();
return result;
}

View File

@@ -8,7 +8,7 @@ lib/concat-filename.c
Depends-on:
filename
xalloc
malloc-posix
stpcpy
configure.ac:
@@ -20,7 +20,7 @@ Include:
"concat-filename.h"
License:
GPL
LGPLv2+
Maintainer:
Bruno Haible

View File

@@ -10,7 +10,7 @@ m4/eaccess.m4
Depends-on:
stdbool
xalloc
filename
xconcat-filename
unistd
configure.ac:

View File

@@ -20,7 +20,7 @@ safe-read
xalloc
xmalloca
getline
filename
xconcat-filename
fwriteerror
clean-temp
error

View File

@@ -11,7 +11,7 @@ execute
classpath
xsetenv
sh-quote
filename
xconcat-filename
xalloc
xmalloca
error

26
modules/xconcat-filename Normal file
View File

@@ -0,0 +1,26 @@
Description:
Construct a full filename by concatenating a directory name, a relative
filename, and a suffix, with out-of-memory checking.
Files:
lib/concat-filename.h
lib/xconcat-filename.c
Depends-on:
concat-filename
xalloc-die
configure.ac:
Makefile.am:
lib_SOURCES += xconcat-filename.c
Include:
"concat-filename.h"
License:
GPL
Maintainer:
Bruno Haible