Mercurial > trustbridge
annotate common/portpath.c @ 831:747a48996c1f
(Issue13) Precompile uninstaller
Create-dist-packge now creates a temporary installer that only
writes the uninstaller. Then it excutes this installer (using wine)
to create the uninstaller. That uninstaller is then packaged
normaly and packaged instead of the written uninstaller.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Thu, 24 Jul 2014 15:59:00 +0200 |
parents | 17e1c8f37d72 |
children | b3695a3399de |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
146
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
8 #include "portpath.h" |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
9 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
10 #include <libgen.h> |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
11 #include <limits.h> |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
12 #include <stdio.h> |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
13 #include <stdlib.h> |
168
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
14 #include <sys/stat.h> |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
15 #include <sys/types.h> |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
16 #include <unistd.h> |
146
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
17 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
18 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
19 char * |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
20 port_dirname(char *path) |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
21 { |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
22 #ifndef _WIN32 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
23 return dirname(path); |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
24 #else |
164
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
25 char drive[_MAX_DRIVE]; |
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
26 char dir[_MAX_DIR]; |
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
27 _splitpath(path, drive, dir, NULL, NULL); |
170
3343ddf43f42
Windows implementation of port_dirname: strip trailing '/' and '\'.
Sascha Wilde <wilde@intevation.de>
parents:
169
diff
changeset
|
28 size_t dlen = strlen(dir); |
3343ddf43f42
Windows implementation of port_dirname: strip trailing '/' and '\'.
Sascha Wilde <wilde@intevation.de>
parents:
169
diff
changeset
|
29 if ((dlen > 0) && |
3343ddf43f42
Windows implementation of port_dirname: strip trailing '/' and '\'.
Sascha Wilde <wilde@intevation.de>
parents:
169
diff
changeset
|
30 ((dir[dlen-1] == '/') || (dir[dlen-1] == '\\'))) |
3343ddf43f42
Windows implementation of port_dirname: strip trailing '/' and '\'.
Sascha Wilde <wilde@intevation.de>
parents:
169
diff
changeset
|
31 dir[dlen-1] = '\0'; |
164
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
32 /* We assume: drive + dir is shorter than |
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
33 * drive + dir + fname + ext */ |
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
34 sprintf(path, "%s%s", drive, dir); |
6d64d7e9fa32
Implemented port_dirname for windows.
Sascha Wilde <wilde@intevation.de>
parents:
146
diff
changeset
|
35 return path; |
146
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
36 #endif |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
37 } |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
38 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
39 char * |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
40 port_realpath(char *path) |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
41 { |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
42 #ifndef _WIN32 |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
43 return realpath(path, NULL); |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
44 #else |
169
701b7036c5dc
Windows implementation of port_realpath: NULL if file does not exist.
Sascha Wilde <wilde@intevation.de>
parents:
168
diff
changeset
|
45 char *fp = _fullpath(NULL, path, 0); |
701b7036c5dc
Windows implementation of port_realpath: NULL if file does not exist.
Sascha Wilde <wilde@intevation.de>
parents:
168
diff
changeset
|
46 if (port_fileexits(fp)) |
701b7036c5dc
Windows implementation of port_realpath: NULL if file does not exist.
Sascha Wilde <wilde@intevation.de>
parents:
168
diff
changeset
|
47 return fp; |
701b7036c5dc
Windows implementation of port_realpath: NULL if file does not exist.
Sascha Wilde <wilde@intevation.de>
parents:
168
diff
changeset
|
48 else |
701b7036c5dc
Windows implementation of port_realpath: NULL if file does not exist.
Sascha Wilde <wilde@intevation.de>
parents:
168
diff
changeset
|
49 return NULL; |
146
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
50 #endif |
306e4db11761
Added portable path name handling functions.
Sascha Wilde <wilde@intevation.de>
parents:
diff
changeset
|
51 } |
168
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
52 |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
53 bool |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
54 port_fileexits(char *path) |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
55 { |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
56 int ret; |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
57 #ifndef _WIN32 |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
58 struct stat sb; |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
59 ret = stat(path, &sb); |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
60 #else |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
61 struct _stat sb; |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
62 ret = _stat(path, &sb); |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
63 #endif |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
64 |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
65 if (ret == 0) |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
66 return true; |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
67 else |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
68 return false; |
f100861dad8f
Added simple portable function to test if an file exists.
Sascha Wilde <wilde@intevation.de>
parents:
166
diff
changeset
|
69 } |
176
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
70 |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
71 bool |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
72 port_isdir(char *path) |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
73 { |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
74 int ret; |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
75 #ifndef _WIN32 |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
76 struct stat sb; |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
77 ret = stat(path, &sb); |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
78 #else |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
79 struct _stat sb; |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
80 ret = _stat(path, &sb); |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
81 #endif |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
82 |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
83 if ((ret == 0) && S_ISDIR(sb.st_mode)) |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
84 return true; |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
85 else |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
86 return false; |
70d627e9e801
New portability function to test if a file is an directory.
Sascha Wilde <wilde@intevation.de>
parents:
170
diff
changeset
|
87 } |