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:
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user