1 /* nbdkit 2 * Copyright (C) 2018 Red Hat Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * * Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * * Neither the name of Red Hat nor the names of its contributors may be 16 * used to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33 #ifndef NBDKIT_CALL_H 34 #define NBDKIT_CALL_H 35 36 /* eval and sh plugin call this in .load() to initialize some things 37 * in the shared call code. This also creates the tmpdir[] directory. 38 */ 39 extern void call_load (void); 40 extern char tmpdir[]; 41 42 /* Similarly the plugins should call this in their .unload() 43 * functions. It deletes tmpdir amongst other things. 44 */ 45 extern void call_unload (void); 46 47 /* Exit codes. */ 48 typedef enum exit_code { 49 OK = 0, 50 ERROR = 1, /* all script error codes are mapped to this */ 51 MISSING = 2, /* method missing */ 52 RET_FALSE = 3 /* script exited with code 3 meaning false */ 53 } exit_code; 54 55 extern exit_code call (const char **argv) 56 __attribute__((__nonnull__ (1))); 57 extern exit_code call_read (char **rbuf, size_t *rbuflen, const char **argv) 58 __attribute__((__nonnull__ (1, 2, 3))); 59 extern exit_code call_write (const char *wbuf, size_t wbuflen, 60 const char **argv) 61 __attribute__((__nonnull__ (1, 3))); 62 63 #endif /* NBDKIT_CALL_H */ 64