xref: /plan9/sys/src/cmd/gs/src/gp_unifn.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1994, 1996 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: gp_unifn.c,v 1.16 2004/01/05 23:34:47 giles Exp $ */
18 /* Unix-like file name syntax platform routines for Ghostscript */
19 #include "gx.h"
20 #include "gp.h"
21 #include "gpmisc.h"
22 #include "gsutil.h"
23 
24 /* Define the character used for separating file names in a list. */
25 const char gp_file_name_list_separator = ':';
26 
27 /* Define the string to be concatenated with the file mode */
28 /* for opening files without end-of-line conversion. */
29 const char gp_fmode_binary_suffix[] = "";
30 
31 /* Define the file modes for binary reading or writing. */
32 const char gp_fmode_rb[] = "r";
33 const char gp_fmode_wb[] = "w";
34 
35 /* -------------- Helpers for gp_file_name_combine_generic ------------- */
36 
gp_file_name_root(const char * fname,uint len)37 uint gp_file_name_root(const char *fname, uint len)
38 {   if (len > 0 && fname[0] == '/')
39 	return 1;
40     return 0;
41 }
42 
gs_file_name_check_separator(const char * fname,int len,const char * item)43 uint gs_file_name_check_separator(const char *fname, int len, const char *item)
44 {   if (len > 0) {
45 	if (fname[0] == '/')
46 	    return 1;
47     } else if (len < 0) {
48 	if (fname[-1] == '/')
49 	    return 1;
50     }
51     return 0;
52 }
53 
gp_file_name_is_parent(const char * fname,uint len)54 bool gp_file_name_is_parent(const char *fname, uint len)
55 {   return len == 2 && fname[0] == '.' && fname[1] == '.';
56 }
57 
gp_file_name_is_current(const char * fname,uint len)58 bool gp_file_name_is_current(const char *fname, uint len)
59 {   return len == 1 && fname[0] == '.';
60 }
61 
gp_file_name_separator(void)62 const char *gp_file_name_separator(void)
63 {   return "/";
64 }
65 
gp_file_name_directory_separator(void)66 const char *gp_file_name_directory_separator(void)
67 {   return "/";
68 }
69 
gp_file_name_parent(void)70 const char *gp_file_name_parent(void)
71 {   return "..";
72 }
73 
gp_file_name_current(void)74 const char *gp_file_name_current(void)
75 {   return ".";
76 }
77 
gp_file_name_is_partent_allowed(void)78 bool gp_file_name_is_partent_allowed(void)
79 {   return true;
80 }
81 
gp_file_name_is_empty_item_meanful(void)82 bool gp_file_name_is_empty_item_meanful(void)
83 {   return false;
84 }
85 
86 gp_file_name_combine_result
gp_file_name_combine(const char * prefix,uint plen,const char * fname,uint flen,bool no_sibling,char * buffer,uint * blen)87 gp_file_name_combine(const char *prefix, uint plen, const char *fname, uint flen,
88 		    bool no_sibling, char *buffer, uint *blen)
89 {
90     return gp_file_name_combine_generic(prefix, plen,
91 	    fname, flen, no_sibling, buffer, blen);
92 }
93