From 692207eb457f9b4bf6cb4301d710d19b6e85c902 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 28 Feb 2014 16:23:27 -0800 Subject: [PATCH] Add getprogname/setprogname for BSD compatibility. This is one less change we have to make when porting BSD code. Bug: https://code.google.com/p/android/issues/detail?id=34898 Change-Id: If9b1a8d16996c7a19abcce8d3a456afc3e105a41 --- libc/Android.mk | 6 ++-- libc/include/stdlib.h | 4 +++ .../lib/libc/gen/getprogname.c | 24 ++++++++++++++ .../lib/libc/gen/setprogname.c | 32 +++++++++++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 libc/upstream-openbsd/lib/libc/gen/getprogname.c create mode 100644 libc/upstream-openbsd/lib/libc/gen/setprogname.c diff --git a/libc/Android.mk b/libc/Android.mk index 852db739c..d4ccefbe5 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -317,10 +317,12 @@ libc_upstream_netbsd_src_files := \ libc_upstream_openbsd_src_files := \ upstream-openbsd/lib/libc/gen/exec.c \ - upstream-openbsd/lib/libc/gen/ftok.c \ upstream-openbsd/lib/libc/gen/fnmatch.c \ - upstream-openbsd/lib/libc/gen/toupper_.c \ + upstream-openbsd/lib/libc/gen/ftok.c \ + upstream-openbsd/lib/libc/gen/getprogname.c \ + upstream-openbsd/lib/libc/gen/setprogname.c \ upstream-openbsd/lib/libc/gen/tolower_.c \ + upstream-openbsd/lib/libc/gen/toupper_.c \ upstream-openbsd/lib/libc/string/strstr.c \ upstream-openbsd/lib/libc/string/strsep.c \ upstream-openbsd/lib/libc/string/wcslcpy.c \ diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index 9c04059b3..9595170a3 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -153,6 +153,10 @@ typedef struct { extern lldiv_t lldiv(long long, long long); +/* BSD compatibility. */ +extern const char* getprogname(void); +extern void setprogname(const char*); + #if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */ /* make STLPort happy */ extern int mblen(const char *, size_t); diff --git a/libc/upstream-openbsd/lib/libc/gen/getprogname.c b/libc/upstream-openbsd/lib/libc/gen/getprogname.c new file mode 100644 index 000000000..1cf498c88 --- /dev/null +++ b/libc/upstream-openbsd/lib/libc/gen/getprogname.c @@ -0,0 +1,24 @@ +/* $OpenBSD: getprogname.c,v 1.2 2013/05/31 21:19:01 tedu Exp $ */ +/* + * Copyright (c) 2013 Antoine Jacoutot + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +extern const char *__progname; + +const char * +getprogname(void) +{ + return (__progname); +} diff --git a/libc/upstream-openbsd/lib/libc/gen/setprogname.c b/libc/upstream-openbsd/lib/libc/gen/setprogname.c new file mode 100644 index 000000000..18b2ce03b --- /dev/null +++ b/libc/upstream-openbsd/lib/libc/gen/setprogname.c @@ -0,0 +1,32 @@ +/* $OpenBSD: setprogname.c,v 1.3 2013/06/01 01:43:43 tedu Exp $ */ +/* + * Copyright (c) 2013 Antoine Jacoutot + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +extern const char *__progname; + +void +setprogname(const char *progname) +{ + const char *tmpn; + + tmpn = strrchr(progname, '/'); + if (tmpn == NULL) + __progname = progname; + else + __progname = tmpn + 1; +}