Skip to content

Commit 8c8d241

Browse files
committed
optimized
Signed-off-by: leleliu008 <leleliu008@gmail.com>
1 parent c53402c commit 8c8d241

File tree

2 files changed

+90
-26
lines changed

2 files changed

+90
-26
lines changed

src/home.c

+46-26
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
#include <errno.h>
12
#include <stdio.h>
23
#include <string.h>
4+
35
#include <unistd.h>
46
#include <sys/stat.h>
57

@@ -14,71 +16,89 @@ int uppm_home_dir(char buf[], size_t bufSize, size_t * outSize) {
1416
return UPPM_ERROR_ARG_IS_INVALID;
1517
}
1618

17-
const char * const uppmHomeDir = getenv("UPPM_HOME");
19+
const char * const uppmHomeDIR = getenv("UPPM_HOME");
1820

19-
if (uppmHomeDir == NULL) {
20-
const char * const userHomeDir = getenv("HOME");
21+
if (uppmHomeDIR == NULL) {
22+
const char * const userHomeDIR = getenv("HOME");
2123

22-
if (userHomeDir == NULL) {
24+
if (userHomeDIR == NULL) {
2325
return UPPM_ERROR_ENV_HOME_NOT_SET;
2426
}
2527

26-
size_t userHomeDirLength = strlen(userHomeDir);
27-
28-
if (userHomeDirLength == 0U) {
28+
if (userHomeDIR[0] == '\0') {
2929
return UPPM_ERROR_ENV_HOME_NOT_SET;
3030
}
3131

32-
size_t uppmHomeDirLength = userHomeDirLength + + 7U;
33-
char uppmHomeDir[uppmHomeDirLength];
34-
snprintf(uppmHomeDir, uppmHomeDirLength, "%s/.uppm", userHomeDir);
32+
size_t defaultUppmHomeDIRCapacity = strlen(userHomeDIR) + 7U;
33+
char defaultUppmHomeDIR[defaultUppmHomeDIRCapacity];
34+
35+
int ret = snprintf(defaultUppmHomeDIR, defaultUppmHomeDIRCapacity, "%s/.uppm", userHomeDIR);
36+
37+
if (ret < 0) {
38+
perror(NULL);
39+
return UPPM_ERROR;
40+
}
41+
42+
size_t defaultUppmHomeDIRLength = ret;
3543

3644
struct stat st;
3745

38-
if (stat(uppmHomeDir, &st) == 0) {
46+
if (stat(defaultUppmHomeDIR, &st) == 0) {
3947
if (!S_ISDIR(st.st_mode)) {
40-
fprintf(stderr, "'%s\n' was expected to be a directory, but it was not.\n", uppmHomeDir);
48+
fprintf(stderr, "%s was expected to be a directory, but it was not.\n", defaultUppmHomeDIR);
4149
return UPPM_ERROR;
4250
}
4351
} else {
44-
if (mkdir(uppmHomeDir, S_IRWXU) != 0) {
45-
perror(uppmHomeDir);
46-
return UPPM_ERROR;
52+
if (mkdir(defaultUppmHomeDIR, S_IRWXU) != 0) {
53+
if (errno != EEXIST) {
54+
perror(defaultUppmHomeDIR);
55+
return UPPM_ERROR;
56+
}
4757
}
4858
}
4959

50-
size_t n = (bufSize > uppmHomeDirLength) ? uppmHomeDirLength : bufSize;
60+
size_t m = bufSize - 1U;
61+
62+
size_t n = (m > defaultUppmHomeDIRLength) ? defaultUppmHomeDIRLength : m;
63+
64+
strncpy(buf, defaultUppmHomeDIR, n);
5165

52-
strncpy(buf, uppmHomeDir, n);
66+
buf[n] = '\0';
5367

5468
if (outSize != NULL) {
5569
(*outSize) = n;
5670
}
5771
} else {
58-
if (uppmHomeDir[0] == '\0') {
72+
if (uppmHomeDIR[0] == '\0') {
5973
fprintf(stderr, "'UPPM_HOME' environment variable's value was expected to be a non-empty string, but it was not.\n");
6074
return UPPM_ERROR;
6175
}
6276

6377
struct stat st;
6478

65-
if (stat(uppmHomeDir, &st) == 0) {
79+
if (stat(uppmHomeDIR, &st) == 0) {
6680
if (!S_ISDIR(st.st_mode)) {
67-
fprintf(stderr, "'%s\n' was expected to be a directory, but it was not.\n", uppmHomeDir);
81+
fprintf(stderr, "%s was expected to be a directory, but it was not.\n", uppmHomeDIR);
6882
return UPPM_ERROR;
6983
}
7084
} else {
71-
if (mkdir(uppmHomeDir, S_IRWXU) != 0) {
72-
perror(uppmHomeDir);
73-
return UPPM_ERROR;
85+
if (mkdir(uppmHomeDIR, S_IRWXU) != 0) {
86+
if (errno != EEXIST) {
87+
perror(uppmHomeDIR);
88+
return UPPM_ERROR;
89+
}
7490
}
7591
}
7692

77-
size_t uppmHomeDirLength = strlen(uppmHomeDir);
93+
size_t uppmHomeDIRLength = strlen(uppmHomeDIR);
94+
95+
size_t m = bufSize - 1U;
96+
97+
size_t n = (m > uppmHomeDIRLength) ? uppmHomeDIRLength : m;
7898

79-
size_t n = (bufSize > uppmHomeDirLength) ? uppmHomeDirLength : bufSize;
99+
strncpy(buf, uppmHomeDIR, n);
80100

81-
strncpy(buf, uppmHomeDir, n);
101+
buf[n] = '\0';
82102

83103
if (outSize != NULL) {
84104
(*outSize) = n;

src/upgrade-self.c

+44
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,54 @@ static int uppm_upgrade_tar_filename(char buf[], const size_t bufSize, const cha
6161
#elif defined (__DragonFly__)
6262
ret = snprintf(buf, bufSize, "uppm-%s-%s-%s-%s.tar.xz", latestVersion, osType, osVers, osArch);
6363
#elif defined (__FreeBSD__)
64+
double v = atof(osVers * 10);
65+
66+
if (v < 130) {
67+
osVers[0] = '1';
68+
osVers[1] = '3';
69+
osVers[2] = '.';
70+
osVers[3] = '0';
71+
osVers[4] = '\0';
72+
} else if (v > 132) {
73+
osVers[0] = '1';
74+
osVers[1] = '3';
75+
osVers[2] = '.';
76+
osVers[3] = '2';
77+
osVers[4] = '\0';
78+
}
79+
6480
ret = snprintf(buf, bufSize, "uppm-%s-%s-%s-%s.tar.xz", latestVersion, osType, osVers, osArch);
6581
#elif defined (__OpenBSD__)
82+
double v = atof(osVers * 10);
83+
84+
if (v < 73) {
85+
osVers[0] = '7';
86+
osVers[1] = '.';
87+
osVers[2] = '3';
88+
osVers[3] = '\0';
89+
} else if (v > 74) {
90+
osVers[0] = '7';
91+
osVers[1] = '.';
92+
osVers[2] = '4';
93+
osVers[3] = '\0';
94+
}
95+
6696
ret = snprintf(buf, bufSize, "uppm-%s-%s-%s-%s.tar.xz", latestVersion, osType, osVers, osArch);
6797
#elif defined (__NetBSD__)
98+
double v = atof(osVers * 10);
99+
100+
if (v < 92) {
101+
osVers[0] = '9';
102+
osVers[1] = '.';
103+
osVers[2] = '2';
104+
osVers[3] = '\0';
105+
} else if (v > 93) {
106+
osVers[0] = '9';
107+
osVers[1] = '.';
108+
osVers[2] = '3';
109+
osVers[3] = '\0';
110+
}
111+
68112
ret = snprintf(buf, bufSize, "uppm-%s-%s-%s-%s.tar.xz", latestVersion, osType, osVers, osArch);
69113
#else
70114
ret = snprintf(buf, bufSize, "uppm-%s-%s-%s.tar.xz", latestVersion, osType, osArch);

0 commit comments

Comments
 (0)