diff options
author | Colin Cross <ccross@android.com> | 2021-09-08 15:02:55 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2021-10-01 12:21:28 -0700 |
commit | 5bef4576861651caf76fbb163ecf09d93dda57ca (patch) | |
tree | 6ac8e6df2b1f70f000be32836c0fb8f7e65362cf | |
parent | d848717095ce5ea00ada2890191064d073bb238f (diff) | |
download | obstack-5bef4576861651caf76fbb163ecf09d93dda57ca.tar.gz |
Add obstack_printf to libobstack
Add a reimplementation of obstack_printf to libobstack, and wrap
libiberty's obstack.h with a version that declares obstack_printf.
Bug: 199322054
Test: m USE_HOST_MUSL=true abidw
Change-Id: I3988d35ca506fbe6ad61b4b987c637b5ba31e67b
-rw-r--r-- | Android.bp | 2 | ||||
-rw-r--r-- | android/include/obstack.h | 26 | ||||
-rw-r--r-- | android/obstack_printf.c | 42 |
3 files changed, 70 insertions, 0 deletions
@@ -18,9 +18,11 @@ cc_library_host_static { }, srcs: [ "libiberty/obstack.c", + "android/obstack_printf.c", ], local_include_dirs: ["android"], export_include_dirs: [ + "android/include", "include", ], visibility: [ diff --git a/android/include/obstack.h b/android/include/obstack.h new file mode 100644 index 0000000..a45421e --- /dev/null +++ b/android/include/obstack.h @@ -0,0 +1,26 @@ +/* + * Copyright 2021, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This is a wrapper around gnulib's obstack.h to add obstack_printf. + */ + +#pragma once + +#include_next <obstack.h> + +int obstack_printf(struct obstack *obs, const char *format, ...) + __attribute__((__format__(printf, 2, 3))); diff --git a/android/obstack_printf.c b/android/obstack_printf.c new file mode 100644 index 0000000..647d7f7 --- /dev/null +++ b/android/obstack_printf.c @@ -0,0 +1,42 @@ +/* + * Copyright 2021, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This is a reimplementation of obstack_printf for use by libcpu, which + * uses it to print an error message. + */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <obstack.h> + +int __attribute__((__format__(printf, 2, 3))) obstack_printf(struct obstack *obs, const char *format, ...) { + + va_list ap; + va_start(ap, format); + + char* str = NULL; + int len = vasprintf(&str, format, ap); + if (len < 0) { + return len; + } + + obstack_grow(obs, str, len); + free(str); + + return len; +} |