| author | Tero Marttila <terom@fixme.fi> |
| Mon, 25 Jan 2010 01:41:25 +0200 | |
| changeset 56 | d5e3089906da |
| parent 17 | baf3fe7c6354 |
| permissions | -rw-r--r-- |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "util.h" |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <string.h> |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
4 |
#include <errno.h> |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
int chfext (char *buf, size_t len, const char *newext) |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
{
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
char *ext; |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
// find .ext |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
11 |
if ((ext = strrchr(buf, '.')) == NULL) {
|
|
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
12 |
errno = EINVAL; |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
return -1; |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
14 |
} |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
// check length |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
17 |
if (ext + strlen(newext) >= buf + len) {
|
|
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
18 |
errno = ENAMETOOLONG; |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
return -1; |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
20 |
} |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
// change to .foo |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
strcpy(ext, newext); |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
// ok |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
return 0; |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
} |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
int path_with_fext (const char *path, char *buf, size_t len, const char *newext) |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
{
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
// verify length |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
32 |
if (strlen(path) > len) {
|
|
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
33 |
errno = ENAMETOOLONG; |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
return -1; |
|
17
baf3fe7c6354
add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents:
4
diff
changeset
|
35 |
} |
|
4
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
// copy filename |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
strcpy(buf, path); |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
|
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
// change fext |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
return chfext(buf, len, newext); |
|
49362b34116c
open cache as .tmp, and rename to .cache when done
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
} |