1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-09 19:23:13 +02:00

Add "version_number" for API function weechat_info_get to get WeeChat version as number

This commit is contained in:
Sebastien Helleu
2010-02-10 11:21:25 +01:00
parent f6868c40af
commit 3799d2c2a5
15 changed files with 124 additions and 12 deletions
+59
View File
@@ -38,6 +38,7 @@
#include "wee-util.h"
#include "wee-config.h"
#include "wee-string.h"
#include "wee-utf8.h"
/*
@@ -408,3 +409,61 @@ util_file_get_content (const char *filename)
return buffer;
}
/*
* util_version_number: get version number (integer) with version as string
* (non-digit chars like "-dev" are ignored)
* for example:
* "0.3.2-dev" ==> 197120 (== 0x00030200)
* "0.3.2" ==> 197120 (== 0x00030200)
* "0.3.1.1" ==> 196865 (== 0x00030101)
* "0.3.1" ==> 196864 (== 0x00030100)
* "0.3.0" ==> 196608 (== 0x00030000)
*/
int
util_version_number (const char *version)
{
char **items, buf[64], *ptr_item, *error;
int num_items, i, version_int[4], index_buf;
long number;
items = string_split (version, ".", 0, 4, &num_items);
for (i = 0; i < 4; i++)
{
version_int[i] = 0;
if (items && (i < num_items))
{
ptr_item = items[i];
index_buf = 0;
while (ptr_item && ptr_item[0] && (index_buf < (int)sizeof (buf) - 1))
{
if (isdigit (ptr_item[0]))
{
buf[index_buf] = ptr_item[0];
index_buf++;
}
ptr_item = utf8_next_char (ptr_item);
}
buf[index_buf] = '\0';
if (buf[0])
{
error = NULL;
number = strtol (buf, &error, 10);
if (error && !error[0])
{
if (number < 0)
number = 0;
else if (number > 0xFF)
number = 0xFF;
version_int[i] = number;
}
}
}
}
if (items)
string_free_split (items);
return (version_int[0] << 24) | (version_int[1] << 16)
| (version_int[2] << 8) | version_int[3];
}
+1
View File
@@ -36,4 +36,5 @@ extern void util_exec_on_files (const char *directory, int hidden_files,
extern char *util_search_full_lib_name (const char *filename,
const char *sys_directory);
extern char *util_file_get_content (const char *filename);
extern int util_version_number (const char *version);
#endif /* wee-util.h */
+14 -2
View File
@@ -38,6 +38,7 @@
#include "../core/wee-infolist.h"
#include "../core/wee-input.h"
#include "../core/wee-string.h"
#include "../core/wee-util.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
#include "../gui/gui-bar-window.h"
@@ -258,7 +259,7 @@ plugin_api_info_get_internal (void *data, const char *info_name,
const char *arguments)
{
time_t inactivity;
static char value[32];
static char value[32], version_number[32] = { '\0' };
/* make C compiler happy */
(void) data;
@@ -271,7 +272,16 @@ plugin_api_info_get_internal (void *data, const char *info_name,
{
return PACKAGE_VERSION;
}
if (string_strcasecmp (info_name, "date") == 0)
else if (string_strcasecmp (info_name, "version_number") == 0)
{
if (!version_number[0])
{
snprintf (version_number, sizeof (version_number), "%d",
util_version_number (PACKAGE_VERSION));
}
return version_number;
}
else if (string_strcasecmp (info_name, "date") == 0)
{
return __DATE__;
}
@@ -920,6 +930,8 @@ plugin_api_init ()
/* WeeChat core info hooks */
hook_info (NULL, "version", N_("WeeChat version"),
&plugin_api_info_get_internal, NULL);
hook_info (NULL, "version_number", N_("WeeChat version (as number)"),
&plugin_api_info_get_internal, NULL);
hook_info (NULL, "date", N_("WeeChat compilation date"),
&plugin_api_info_get_internal, NULL);
hook_info (NULL, "dir_separator", N_("directory separator"),