| /************************************************************************ |
| * |
| * rw_braceexp.h - declarations of testsuite helpers |
| * |
| * $Id$ |
| * |
| ************************************************************************ |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed |
| * with this work for additional information regarding copyright |
| * ownership. The ASF licenses this file to you 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 RW_BRACEEXP_H_INCLUDED |
| #define RW_BRACEEXP_H_INCLUDED |
| |
| |
| #include <rw_testdefs.h> |
| |
| // rw_brace_expand() performs brace expansion similar to the csh shell. |
| // the base grammar for the brace expansion is supposed to be.. |
| // |
| // string ::= <brace-expr> | [ <chars> ] |
| // brace-expr ::= <string> '{' <brace-list> | <brace-sequ> '}' <string> | |
| // <string> |
| // brace-list ::= <string> ',' <brace-list> | <string> |
| // brace-sequ ::= <upper> '.' '.' <upper> | |
| // <lower> '.' '.' <lower> | |
| // <integer> '.' '.' <integer> |
| // chars ::= <pcs-char> <string> | <pcs-char> |
| // integer ::= ['+' | '-'] <digits> |
| // upper ::= pcs-char 'a-z' |
| // lower ::= pcs-char 'A-Z' |
| // digit ::= pcs-char '0-9' |
| // digits ::= <digit> <digits> | <digit> |
| // pcs-char ::= character in the Portable Character Set |
| // |
| // many examples can be found in the test 0.braceexp.cpp. |
| // |
| |
| // |
| // this function will attempt to expand `sz' bytes of the brace expression |
| // `brace_expr' into `n' bytes of the output buffer `s', seperating each |
| // expansion with a single seperator character `sep'. if the output buffer |
| // `s' is is null, or the number of bytes `n' is insufficient to contain |
| // all expansions of `brace_expr', an appropriately sized buffer will be |
| // allocated with malloc(). a pointer to the output buffer that is used |
| // will be returned. if the pointer returned is not equal to the user |
| // supplied input buffer `s', then the caller is expected to free() the |
| // returned pointer. |
| // |
| // this function can return null if the brace expansion could not be |
| // processed. this can happen if, for example, the brace expression string |
| // contains an unmatched unescaped open brace. the function can also fail |
| // and return null if a memory allocation request fails. |
| // |
| _TEST_EXPORT char* |
| rw_brace_expand (const char* brace_expr, _RWSTD_SIZE_T sz, |
| char* s, _RWSTD_SIZE_T n, char sep); |
| |
| |
| // |
| // this function is similar to rw_brace_expand, except that the input |
| // string `shell_expr' is tokenized on whitespace, and each non-whitespace |
| // token is expanded seperately. this function will fail if an attempt to |
| // brace expand one of the tokens fails, regardless of the reason for that |
| // failure. |
| // |
| // the caller may need to free() the returned pointer. please see comments |
| // above for details. |
| // |
| // this function only does tokenization and brace expansion at this time. |
| // at some point it may make sense to add environment variable expansion. |
| // |
| _TEST_EXPORT char* |
| rw_shell_expand (const char* shell_expr, _RWSTD_SIZE_T sz, |
| char* s, _RWSTD_SIZE_T n, char sep); |
| |
| |
| #endif // RW_BRACEEXP_H_INCLUDED |
| |