]>
git.wh0rd.org - dump.git/blob - compat/lib/rmtflags.c
2 * Ported to Linux's Second Extended File System as part of the
3 * dump and restore backup suit
4 * Remy Card <card@Linux.EU.Org>, 1994-1997
5 * Stelian Pop <stelian@popies.net>, 1999-2000
6 * Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
10 * Copyright (c) 1983, 1993
11 * The Regents of the University of California. All rights reserved.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. Neither the name of the University nor the names of its contributors
22 * may be used to endorse or promote products derived from this software
23 * without specific prior written permission.
25 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 static const char rcsid
[] =
40 "$Id: rmtflags.c,v 1.3 2003/03/30 15:40:35 stelian Exp $";
41 #endif /* not linux */
58 { "O_RDONLY", O_RDONLY
},
59 { "O_WRONLY", O_WRONLY
},
62 { "O_CREAT", O_CREAT
},
68 { "O_NOCTTY", O_NOCTTY
},
71 { "O_TRUNC", O_TRUNC
},
74 { "O_APPEND", O_APPEND
},
77 { "O_NONBLOCK", O_NONBLOCK
},
80 { "O_NDELAY", O_NDELAY
},
86 { "O_FSYNC", O_FSYNC
},
89 { "O_ASYNC", O_ASYNC
},
95 { "O_DSYNC", O_DSYNC
},
98 { "O_RSYNC", O_RSYNC
},
101 { "O_PRIV", O_PRIV
},
104 { "O_LARGEFILE",O_LARGEFILE
},
109 /* Parts of this stolen again from Jörg Schilling's star package... */
111 rmtflags_toint(char *filemode
)
114 struct openflags
*op
;
121 while (*p
!= '\0' && *p
== ' ')
123 /* get O_XXXX constant */
124 if (p
[0] != 'O' || p
[1] != '_') {
125 /* numeric syntax detected */
126 numresult
= atoi(filemode
);
127 numresult
&= O_RDONLY
| O_WRONLY
| O_RDWR
;
128 while (*p
!= ' ' && *p
!= '\0')
130 while (*p
!= '\0' && *p
== ' ')
137 /* translate O_XXXX constant */
138 for (op
= openflags
; op
->name
; op
++) {
139 int slen
= strlen(op
->name
);
140 if ((strncmp(op
->name
, p
, slen
) == 0) &&
141 (p
[slen
] == '|' || p
[slen
] == ' ' ||
149 /* goto next constant */
151 } while (p
&& *p
++ == '|');
159 rmtflags_tochar(int filemode
)
161 struct openflags
*op
;
162 char *result
= (char *) malloc(4096); /* enough space */
164 switch (filemode
& O_ACCMODE
) {
166 strcpy(result
, "O_RDONLY");
169 strcpy(result
, "O_WRONLY");
172 strcpy(result
, "O_RDWR");
175 strcat(result
, "ERROR");
177 for (op
= openflags
; op
->name
; op
++) {
178 if (op
->value
== O_RDONLY
||
179 op
->value
== O_WRONLY
||
182 if (filemode
& op
->value
) {
184 strcat(result
, op
->name
);