diff options
| author | Jean-Baptiste Queru <jbq@google.com> | 2008-12-19 08:15:15 -0800 |
|---|---|---|
| committer | Jean-Baptiste Queru <jbq@google.com> | 2008-12-19 08:15:15 -0800 |
| commit | 77d0c65b950570edd5241a8f2ebecfc3acbc5135 (patch) | |
| tree | 8e3d3e2ca15d3bd038de6e22e1f00f31aad1406f /adb/utils.h | |
| parent | 829dd45fe9556dac5996969c30b90f1be6c47c47 (diff) | |
| parent | 35237d135807af84bf9b0e5b8d7f8633e58db6f5 (diff) | |
| download | system_core-77d0c65b950570edd5241a8f2ebecfc3acbc5135.tar.gz system_core-77d0c65b950570edd5241a8f2ebecfc3acbc5135.tar.bz2 system_core-77d0c65b950570edd5241a8f2ebecfc3acbc5135.zip | |
Merge commit 'remotes/korg/cupcake'
Conflicts:
init/devices.c
logwrapper/logwrapper.c
mountd/AutoMount.c
Diffstat (limited to 'adb/utils.h')
| -rw-r--r-- | adb/utils.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/adb/utils.h b/adb/utils.h new file mode 100644 index 00000000..f70ecd24 --- /dev/null +++ b/adb/utils.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2008 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. + */ +#ifndef _ADB_UTILS_H +#define _ADB_UTILS_H + +/* bounded buffer functions */ + +/* all these functions are used to append data to a bounded buffer. + * + * after each operation, the buffer is guaranteed to be zero-terminated, + * even in the case of an overflow. they all return the new buffer position + * which allows one to use them in succession, only checking for overflows + * at the end. For example: + * + * BUFF_DECL(temp,p,end,1024); + * char* p; + * + * p = buff_addc(temp, end, '"'); + * p = buff_adds(temp, end, string); + * p = buff_addc(temp, end, '"'); + * + * if (p >= end) { + * overflow detected. note that 'temp' is + * zero-terminated for safety. + * } + * return strdup(temp); + */ + +/* tries to add a character to the buffer, in case of overflow + * this will only write a terminating zero and return buffEnd. + */ +char* buff_addc (char* buff, char* buffEnd, int c); + +/* tries to add a string to the buffer */ +char* buff_adds (char* buff, char* buffEnd, const char* s); + +/* tries to add a bytes to the buffer. the input can contain zero bytes, + * but a terminating zero will always be appended at the end anyway + */ +char* buff_addb (char* buff, char* buffEnd, const void* data, int len); + +/* tries to add a formatted string to a bounded buffer */ +char* buff_add (char* buff, char* buffEnd, const char* format, ... ); + +/* convenience macro used to define a bounded buffer, as well as + * a 'cursor' and 'end' variables all in one go. + * + * note: this doesn't place an initial terminating zero in the buffer, + * you need to use one of the buff_ functions for this. or simply + * do _cursor[0] = 0 manually. + */ +#define BUFF_DECL(_buff,_cursor,_end,_size) \ + char _buff[_size], *_cursor=_buff, *_end = _cursor + (_size) + +#endif /* _ADB_UTILS_H */ |
