source: trunk/daemon/misc.h @ 3175

Last change on this file since 3175 was 3175, checked in by charles, 15 years ago

add bsdqueue.h to daemon dir

  • Property svn:keywords set to Date Rev Author Id
File size: 6.4 KB
Line 
1/******************************************************************************
2 * $Id: misc.h 3175 2007-09-25 23:59:50Z charles $
3 *
4 * Copyright (c) 2007 Joshua Elsasser
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *****************************************************************************/
24
25#ifndef TR_DAEMON_MISC_H
26#define TR_DAEMON_MISC_H
27
28#include <sys/types.h>
29#include <inttypes.h>
30#include <limits.h>
31
32#include "bsdqueue.h"
33
34#define CONF_FILE_LOCK          "lock"
35#define CONF_FILE_SOCKET        "socket"
36#define CONF_FILE_STATE         "state"
37
38enum confpathtype
39{
40    CONF_PATH_TYPE_DAEMON,
41    CONF_PATH_TYPE_GTK,
42    CONF_PATH_TYPE_OSX,
43};
44
45struct bufferevent;
46
47#ifdef __GNUC__
48#  define UNUSED __attribute__((unused))
49#else
50#  define UNUSED
51#endif
52
53#ifdef __GNUC__
54#  define PRINTF( fmt, args ) __attribute__((format (printf, fmt, args)))
55#else
56#  define PRINTF( fmt, args )
57#endif
58
59#define ARRAYLEN( ary )         ( sizeof( ary ) / sizeof( (ary)[0] ) )
60
61#ifndef MIN
62#define MIN( aa, bb )           ( (aa) < (bb) ? (aa) : (bb) )
63#endif
64#ifndef MAX
65#define MAX( aa, bb )           ( (aa) > (bb) ? (aa) : (bb) )
66#endif
67
68#undef NULL
69#define NULL                    ( ( void * )0 )
70
71#ifndef AF_LOCAL
72#define AF_LOCAL AF_UNIX
73#endif
74
75#ifndef PF_LOCAL
76#define PF_LOCAL PF_UNIX
77#endif
78
79#ifndef SUN_LEN
80#define SUN_LEN( sun )                                                       \
81  ( sizeof( *(sun) ) - sizeof( (sun)->sun_path ) + strlen( (sun)->sun_path ) )
82#endif
83
84#define SAFEFREE( ptr )                                                       \
85    do                                                                        \
86    {                                                                         \
87        int saved = errno;                                                    \
88        free( ptr );                                                          \
89        errno = saved;                                                        \
90    }                                                                         \
91    while( 0 )
92#define SAFEFREESTRLIST( ptr )                                                \
93    do                                                                        \
94    {                                                                         \
95        int saved = errno;                                                    \
96        FREESTRLIST( ptr );                                                   \
97        errno = saved;                                                        \
98    }                                                                         \
99    while( 0 )
100#define SAFEBENCFREE( val )                                                   \
101    do                                                                        \
102    {                                                                         \
103        int saved = errno;                                                    \
104        tr_bencFree( val );                                                   \
105        errno = saved;                                                        \
106    }                                                                         \
107    while( 0 )
108
109#define INTCMP_FUNC( name, type, id )                                         \
110int                                                                           \
111name( struct type * _icf_first, struct type * _icf_second )                   \
112{                                                                             \
113    if( _icf_first->id < _icf_second->id )                                    \
114    {                                                                         \
115        return -1;                                                            \
116    }                                                                         \
117    else if( _icf_first->id > _icf_second->id )                               \
118    {                                                                         \
119        return 1;                                                             \
120    }                                                                         \
121    else                                                                      \
122    {                                                                         \
123        return 0;                                                             \
124    }                                                                         \
125}
126
127struct stritem
128{
129    char                 * str;
130    SLIST_ENTRY( stritem ) next;
131};
132
133SLIST_HEAD( strlist, stritem );
134
135#define FREESTRLIST( _fl_head )                                               \
136    while( !SLIST_EMPTY( _fl_head ) )                                         \
137    {                                                                         \
138        struct stritem * _fl_dead = SLIST_FIRST( _fl_head );                  \
139        SLIST_REMOVE_HEAD( _fl_head, next );                                  \
140        free( _fl_dead->str );                                                \
141        free( _fl_dead );                                                     \
142    }
143
144void         setmyname ( const char * );
145const char * getmyname ( void );
146void         confpath  ( char *, size_t, const char *, enum confpathtype );
147void         absolutify( char *, size_t, const char * );
148int          writefile ( const char *, uint8_t *, ssize_t );
149uint8_t *    readfile  ( const char *, size_t * );
150
151#ifndef HAVE_DAEMON
152int daemon( int, int );
153#endif
154
155#endif /* TR_DAEMON_MISC_H */
Note: See TracBrowser for help on using the repository browser.