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> 2008-09-01 Bruno Haible <bruno@clisp.org>
Split module 'filename' into 'filename' and 'concat-filename'. Split module 'filename' into 'filename' and 'concat-filename'.

7
NEWS
View File

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

View File

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

View File

@@ -23,10 +23,16 @@ extern "C" {
/* Concatenate a directory filename, a relative filename and an optional /* 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, extern char *concatenated_filename (const char *directory,
const char *filename, const char *suffix); 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 #ifdef __cplusplus
} }

View File

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

View File

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

View File

@@ -29,7 +29,7 @@
#include "classpath.h" #include "classpath.h"
#include "xsetenv.h" #include "xsetenv.h"
#include "sh-quote.h" #include "sh-quote.h"
#include "filename.h" #include "concat-filename.h"
#include "xalloc.h" #include "xalloc.h"
#include "xmalloca.h" #include "xmalloca.h"
#include "error.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. */ /* First, try a class compiled to a native code executable. */
if (exe_dir != NULL) 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 *old_classpath;
char **argv = (char **) xmalloca ((1 + nargs + 1) * sizeof (char *)); char **argv = (char **) xmalloca ((1 + nargs + 1) * sizeof (char *));
unsigned int i; 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: Depends-on:
filename filename
xalloc malloc-posix
stpcpy stpcpy
configure.ac: configure.ac:
@@ -20,7 +20,7 @@ Include:
"concat-filename.h" "concat-filename.h"
License: License:
GPL LGPLv2+
Maintainer: Maintainer:
Bruno Haible Bruno Haible

View File

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

View File

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

View File

@@ -11,7 +11,7 @@ execute
classpath classpath
xsetenv xsetenv
sh-quote sh-quote
filename xconcat-filename
xalloc xalloc
xmalloca xmalloca
error 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