struct pakfire_key* key = NULL;
char* section = NULL;
char* buffer = NULL;
+ char refresh[1024];
size_t length = 0;
int r;
}
// Refresh Interval
- char* refresh = pakfire_string_format_interval(repo->appdata->refresh);
- if (refresh) {
- r = pakfire_config_set(config, section, "refresh", refresh);
- free(refresh);
+ r = pakfire_string_format_interval(refresh, repo->appdata->refresh);
+ if (r < 0)
+ goto ERROR;
- if (r < 0) {
- ERROR(repo->ctx, "Could not set refresh interval: %s\n", strerror(-r));
- goto ERROR;
- }
+ // Set the refresh interval
+ r = pakfire_config_set(config, section, "refresh", refresh);
+ if (r < 0) {
+ ERROR(repo->ctx, "Could not set refresh interval: %s\n", strerror(-r));
+ goto ERROR;
}
// Mirror List
US_TO_MS(t->tv_usec));
}
-char* pakfire_string_format_interval(const time_t t) {
- char* buffer = NULL;
+int __pakfire_string_format_interval(char* buffer, size_t length, const time_t t) {
int r;
if (t < 0)
- return NULL;
+ return -EINVAL;
// Weeks
else if (t >= 604800)
- r = asprintf(&buffer, "%ldw", t / 604800);
+ r = __pakfire_string_format(buffer, length, "%ldw", t / 604800);
// Days
else if (t >= 86400)
- r = asprintf(&buffer, "%ldd", t / 86400);
+ r = __pakfire_string_format(buffer, length, "%ldd", t / 86400);
// Hours
else if (t >= 3600)
- r = asprintf(&buffer, "%ldh", t / 3600);
+ r = __pakfire_string_format(buffer, length, "%ldh", t / 3600);
// Minutes
else if (t >= 60)
- r = asprintf(&buffer, "%ldm", t / 60);
+ r = __pakfire_string_format(buffer, length, "%ldm", t / 60);
// Seconds
else
- r = asprintf(&buffer, "%lds", t);
+ r = __pakfire_string_format(buffer, length, "%lds", t);
// Handle any errors
if (r < 0)
- return NULL;
+ return r;
- return buffer;
+ return 0;
}
time_t pakfire_string_parse_interval(const char* buffer) {
size_t pakfire_string_parse_bytes(const char* s);
-char* pakfire_string_format_interval(const time_t t);
+#define pakfire_string_format_interval(buffer, t) \
+ __pakfire_string_format_interval(buffer, sizeof(buffer), t)
+int __pakfire_string_format_interval(char* buffer, size_t length, const time_t t);
+
time_t pakfire_string_parse_interval(const char* buffer);
int pakfire_string_is_url(const char* s);
}
static int test_intervals(const struct test* t) {
+ char buffer[1024];
int r = EXIT_FAILURE;
// Parse
ASSERT(pakfire_string_parse_interval("0abc") == -1);
// Format
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(0), "0s");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(1), "1s");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(5), "5s");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(60), "1m");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(61), "1m");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(3600), "1h");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(86400), "1d");
- ASSERT_STRING_EQUALS(pakfire_string_format_interval(604800), "1w");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 0));
+ ASSERT_STRING_EQUALS(buffer, "0s");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 1));
+ ASSERT_STRING_EQUALS(buffer, "1s");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 5));
+ ASSERT_STRING_EQUALS(buffer, "5s");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 60));
+ ASSERT_STRING_EQUALS(buffer, "1m");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 61));
+ ASSERT_STRING_EQUALS(buffer, "1m");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 3600));
+ ASSERT_STRING_EQUALS(buffer, "1h");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 86400));
+ ASSERT_STRING_EQUALS(buffer, "1d");
+ ASSERT_SUCCESS(pakfire_string_format_interval(buffer, 604800));
+ ASSERT_STRING_EQUALS(buffer, "1w");
// Invalid inputs
- ASSERT(pakfire_string_format_interval(-1) == NULL);
+ ASSERT_ERROR(pakfire_string_format_interval(buffer, -1), EINVAL);
// Everything passed
r = EXIT_SUCCESS;