• R/O
  • SSH
  • HTTPS

tmaid: Commit


Commit MetaInfo

Revisão208 (tree)
Hora2012-08-29 22:38:24
Autoriwm

Mensagem de Log

add time functions

Mudança Sumário

Diff

--- tmaid/trunk/src/file.c (revision 207)
+++ tmaid/trunk/src/file.c (revision 208)
@@ -1,6 +1,6 @@
11 /*
22 Text maid
3- copyright (c) 1998-2011 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
3+ copyright (c) 1998-2012 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
44
55 This program is free software: you can redistribute it and/or modify
66 it under the terms of the GNU General Public License as published by
@@ -131,7 +131,7 @@
131131 gssize bytes_read_prev = -1;
132132
133133 buffer = g_memdup (inbuf, length);
134- while ((g_clear_error (&error),
134+ while (abort_break && (g_clear_error (&error),
135135 !(outbuf = g_convert (buffer, length, "UTF-8", charset[i],
136136 &bytes_read, &bytes_written, &error)))
137137 && bytes_read_prev != bytes_read && error
@@ -253,12 +253,12 @@
253253 g_free (outbuf);
254254 /* ja:変換 */
255255 if (tmaid->ft.html)
256- for (p = tmaid->start; p; p = p->next)
256+ for (p = tmaid->start; abort_break && p; p = p->next)
257257 {
258258 while (gtk_events_pending ())
259259 gtk_main_iteration ();
260260 i = 0;
261- while (i + 4 <= p->length)
261+ while (abort_break && i + 4 <= p->length)
262262 if (p->text[i++] == '&' && p->text[i++] == '#')
263263 {
264264 c = 0;
@@ -265,7 +265,7 @@
265265 if (g_ascii_tolower (p->text[i]) == 'x')
266266 {
267267 /* ja:16進数 */
268- for (j = i + 1; j < p->length; j++)
268+ for (j = i + 1; abort_break && j < p->length; j++)
269269 if (g_ascii_isxdigit (p->text[j]))
270270 c = c * 16 + g_ascii_xdigit_value (p->text[j]);
271271 else
@@ -274,7 +274,7 @@
274274 else
275275 {
276276 /* ja:10進数 */
277- for (j = i; j < p->length; j++)
277+ for (j = i; abort_break && j < p->length; j++)
278278 if (g_ascii_isdigit (p->text[j]))
279279 c = c * 10 + g_ascii_digit_value (p->text[j]);
280280 else
@@ -294,7 +294,7 @@
294294 }
295295 }
296296 else if (tmaid->ft.esc)
297- for (p = tmaid->start; p; p = p->next)
297+ for (p = tmaid->start; abort_break && p; p = p->next)
298298 {
299299 while (gtk_events_pending ())
300300 gtk_main_iteration ();
@@ -303,7 +303,7 @@
303303 if (p->text[i++] == '\\' && p->text[i++] == 'u')
304304 {
305305 c = 0;
306- for (j = i; j < p->length; j++)
306+ for (j = i; abort_break && j < p->length; j++)
307307 if (g_ascii_isxdigit (p->text[j]))
308308 c = c * 16 + g_ascii_xdigit_value (p->text[j]);
309309 else
--- tmaid/trunk/ChangeLog (revision 207)
+++ tmaid/trunk/ChangeLog (revision 208)
@@ -1,3 +1,23 @@
1+2012-08-29 Kazuki Iwamoto <iwm@maid.org>
2+
3+ * version 2.7.3
4+
5+2012-08-16 Kazuki Iwamoto <iwm@maid.org>
6+
7+ * src/file.c: modify loop in file_open_text
8+
9+2012-08-14 Kazuki Iwamoto <iwm@maid.org>
10+
11+ * misc/misc.[ch]: add time functions
12+
13+2012-06-02 Kazuki Iwamoto <iwm@maid.org>
14+
15+ * misc/gcommon.c: modify g_strcmp/g_strncmp
16+
17+2012-05-20 Kazuki Iwamoto <iwm@maid.org>
18+
19+ * misc/fileio.c: modify fileio_remove
20+
121 2012-03-29 Kazuki Iwamoto <iwm@maid.org>
222
323 * version 2.7.2
--- tmaid/trunk/misc/gcommon.c (revision 207)
+++ tmaid/trunk/misc/gcommon.c (revision 208)
@@ -2244,7 +2244,7 @@
22442244 gboolean overwrite)
22452245 {
22462246 # ifdef G_OS_WIN32
2247- gboolean result = FALSE;
2247+ gboolean ret = FALSE;
22482248
22492249 if (variable)
22502250 {
@@ -2260,11 +2260,11 @@
22602260 utf8str = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
22612261 lpszValue = g_utf8_to_utf16 (utf8str, -1, NULL, NULL, NULL);
22622262 g_free (utf8str);
2263- result = SetEnvironmentVariableW (lpszName, lpzaValue);
2263+ ret = SetEnvironmentVariableW (lpszName, lpzaValue);
22642264 g_free (lpszName);
22652265 g_free (lpzaValue);
22662266 # else /* not UNICODE */
2267- result = SetEnvironmentVariableA (variable, value);
2267+ ret = SetEnvironmentVariableA (variable, value);
22682268 # endif /* not UNICODE */
22692269 if (ghash_env)
22702270 g_hash_table_remove (ghash_env, variable);
@@ -2271,15 +2271,15 @@
22712271 }
22722272 else
22732273 {
2274- result = TRUE;
2274+ ret = TRUE;
22752275 }
22762276 }
2277- return result;
2277+ return ret;
22782278 # else /* not G_OS_WIN32 */
22792279 # ifdef HAVE_SETENV
22802280 return variable ? setenv (variable, value, overwrite) : FALSE;
22812281 # else /* not HAVE_SETENV */
2282- gboolean result = FALSE;
2282+ gboolean ret = FALSE;
22832283
22842284 if (variable)
22852285 {
@@ -2288,15 +2288,15 @@
22882288 gchar *string;
22892289
22902290 string = g_strconcat (variable, "=", value, NULL);
2291- result = putenv (string);
2291+ ret = putenv (string);
22922292 g_free (string);
22932293 }
22942294 else
22952295 {
2296- result = TRUE;
2296+ ret = TRUE;
22972297 }
22982298 }
2299- return result;
2299+ return ret;
23002300 # endif /* not HAVE_SETENV */
23012301 # endif /* not G_OS_WIN32 */
23022302 }
@@ -2875,7 +2875,7 @@
28752875 # ifndef FILE_ATTRIBUTE_DEVICE
28762876 # define FILE_ATTRIBUTE_DEVICE 64
28772877 # endif /* not FILE_ATTRIBUTE_DEVICE */
2878- gboolean result = FALSE;
2878+ gboolean ret = FALSE;
28792879 DWORD dwAttributes;
28802880 # ifdef UNICODE
28812881 gchar *utf8str;
@@ -2892,7 +2892,7 @@
28922892 & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE)) == 0)
28932893 || ((test & G_FILE_TEST_IS_DIR)
28942894 && (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0))
2895- result = TRUE;
2895+ ret = TRUE;
28962896 if (test & G_FILE_TEST_IS_EXECUTABLE)
28972897 {
28982898 INT nLength;
@@ -2900,7 +2900,7 @@
29002900 nLength = lstrlenW (lpszFile);
29012901 if (nLength > 4
29022902 && lstrcmpiW (lpszFile + nLength - 4, L".exe") == 0)
2903- result = TRUE;
2903+ ret = TRUE;
29042904 }
29052905 }
29062906 g_free (lpszFile);
@@ -2913,7 +2913,7 @@
29132913 & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE)) == 0)
29142914 || ((test & G_FILE_TEST_IS_DIR)
29152915 && (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0))
2916- result = TRUE;
2916+ ret = TRUE;
29172917 if (test & G_FILE_TEST_IS_EXECUTABLE)
29182918 {
29192919 gsize len;
@@ -2920,11 +2920,11 @@
29202920
29212921 len = g_strlen (file);
29222922 if (len > 4 && g_ascii_strcasecmp (file + len - 4, ".exe") == 0)
2923- result = TRUE;
2923+ ret = TRUE;
29242924 }
29252925 }
29262926 # endif /* not UNICODE */
2927- return result;
2927+ return ret;
29282928 # else /* not G_OS_WIN32 */
29292929 if ((test & G_FILE_TEST_EXISTS) && (g_access (file, F_OK) == 0))
29302930 return TRUE;
@@ -2967,17 +2967,17 @@
29672967 {
29682968 # ifdef UNICODE
29692969 gchar *utf8str;
2970- gint result;
2970+ gint ret;
29712971 LPWSTR lpszFile;
29722972
29732973 utf8str = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
29742974 lpszFile = g_utf8_to_utf16 (utf8str, -1, NULL, NULL, NULL);
29752975 g_free (utf8str);
2976- result = CreateDirectoryW (lpszFile, NULL);
2976+ ret = CreateDirectoryW (lpszFile, NULL);
29772977 g_free (lpszFile);
2978- return result;
2978+ return ret ? 0 : -1;
29792979 # else /* UNICODE */
2980- return CreateDirectoryA (filename, NULL);
2980+ return CreateDirectoryA (filename, NULL) ? 0 : -1;
29812981 # endif /* UNICODE */
29822982 }
29832983 #endif /* ! GLIB_CHECK_VERSION(2,6,0) && defined (G_OS_WIN32) */
@@ -2989,7 +2989,7 @@
29892989 gint mode)
29902990 {
29912991 #ifdef G_OS_WIN32
2992- gint result;
2992+ gint ret;
29932993 LPTSTR lpszFile;
29942994 # ifdef UNICODE
29952995 gchar *utf8str;
@@ -3000,7 +3000,7 @@
30003000 if (!utf8str)
30013001 {
30023002 g_free (path);
3003- return NULL;
3003+ return -1;
30043004 }
30053005 lpszFile = g_utf8_to_utf16 (utf8str, -1, NULL, NULL, NULL);
30063006 g_free (utf8str);
@@ -3012,9 +3012,9 @@
30123012 errno = EINVAL;
30133013 return -1;
30143014 }
3015- result = _tchmod (lpszFile, mode);
3015+ ret = _tchmod (lpszFile, mode);
30163016 g_free (lpszFile);
3017- return result;
3017+ return ret;
30183018 #else /* not G_OS_WIN32 */
30193019 return chmod (filename, mode);
30203020 #endif /* not G_OS_WIN32 */
@@ -3026,7 +3026,7 @@
30263026 gint mode)
30273027 {
30283028 #ifdef G_OS_WIN32
3029- gint result;
3029+ gint ret;
30303030 LPTSTR lpszFile;
30313031 # ifdef UNICODE
30323032 gchar *utf8str;
@@ -3049,9 +3049,9 @@
30493049 errno = EINVAL;
30503050 return -1;
30513051 }
3052- result = _taccess (lpszFile, mode);
3052+ ret = _taccess (lpszFile, mode);
30533053 g_free (lpszFile);
3054- return result;
3054+ return ret;
30553055 #else /* not G_OS_WIN32 */
30563056 return access (filename, mode);
30573057 #endif /* not G_OS_WIN32 */
@@ -3062,7 +3062,7 @@
30623062 gint mode)
30633063 {
30643064 #ifdef G_OS_WIN32
3065- gint result;
3065+ gint ret;
30663066 LPTSTR lpszFile;
30673067 # ifdef UNICODE
30683068 gchar *utf8str;
@@ -3085,9 +3085,9 @@
30853085 errno = EINVAL;
30863086 return -1;
30873087 }
3088- result = _tcreat (lpszFile, mode);
3088+ ret = _tcreat (lpszFile, mode);
30893089 g_free (lpszFile);
3090- return result;
3090+ return ret;
30913091 #else /* not G_OS_WIN32 */
30923092 return creat (filename, mode);
30933093 #endif /* not G_OS_WIN32 */
@@ -3098,7 +3098,7 @@
30983098 g_chdir (const gchar *path)
30993099 {
31003100 #ifdef G_OS_WIN32
3101- gint result;
3101+ gint ret;
31023102 LPTSTR lpszPath;
31033103 # ifdef UNICODE
31043104 gchar *utf8str;
@@ -3121,9 +3121,9 @@
31213121 errno = EINVAL;
31223122 return -1;
31233123 }
3124- result = _tchdir (lpszPath);
3124+ ret = _tchdir (lpszPath);
31253125 g_free (lpszPath);
3126- return result;
3126+ return ret;
31273127 #else /* not G_OS_WIN32 */
31283128 return chdir (path);
31293129 #endif /* not G_OS_WIN32 */
@@ -3137,7 +3137,7 @@
31373137 struct utimbuf *utb)
31383138 {
31393139 #ifdef G_OS_WIN32
3140- gint result;
3140+ gint ret;
31413141 HANDLE hFile;
31423142 LPTSTR lpszFile;
31433143 # ifdef UNICODE
@@ -3161,9 +3161,9 @@
31613161 errno = EINVAL;
31623162 return -1;
31633163 }
3164- result = _tutime (lpszFile, (struct _utimbuf *)utb);
3164+ ret = _tutime (lpszFile, (struct _utimbuf *)utb);
31653165 g_free (lpszFile);
3166- return result;
3166+ return ret;
31673167 #else /* not G_OS_WIN32 */
31683168 # ifdef HAVE_UTIME
31693169 return utime (filename, utb);
@@ -3202,7 +3202,7 @@
32023202 const gchar *reserved_chars_allowed,
32033203 gboolean allow_utf8)
32043204 {
3205- gchar *result = NULL;
3205+ gchar *ret = NULL;
32063206
32073207 if (unescaped)
32083208 {
@@ -3213,7 +3213,7 @@
32133213 "-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~",
32143214 reserved_chars_allowed, NULL);
32153215 p = unescaped;
3216- q = result = g_malloc ((g_strlen (unescaped) * 3 + 1) * sizeof (gchar));
3216+ q = ret = g_malloc ((g_strlen (unescaped) * 3 + 1) * sizeof (gchar));
32173217 while (*p != '\0')
32183218 {
32193219 gunichar c;
@@ -3245,7 +3245,7 @@
32453245 }
32463246 g_free (allowed);
32473247 }
3248- return result;
3248+ return ret;
32493249 }
32503250
32513251
@@ -3262,7 +3262,7 @@
32623262 const gchar *escaped_string_end,
32633263 const gchar *illegal_characters)
32643264 {
3265- gchar *result = NULL;
3265+ gchar *ret = NULL;
32663266
32673267 if (escaped_string)
32683268 {
@@ -3271,7 +3271,7 @@
32713271
32723272 p = escaped_string;
32733273 end = escaped_string_end ? escaped_string_end : p + g_strlen (p);
3274- q = result = g_malloc ((end - escaped_string + 1) * sizeof (gchar));
3274+ q = ret = g_malloc ((end - escaped_string + 1) * sizeof (gchar));
32753275 while (p < end)
32763276 {
32773277 gchar c;
@@ -3286,8 +3286,8 @@
32863286 ? (c1 << 4) | c2 : '\0';
32873287 if (c == '\0' || g_strchr (illegal_characters, c))
32883288 {
3289- g_free (result);
3290- result = NULL;
3289+ g_free (ret);
3290+ ret = NULL;
32913291 break;
32923292 }
32933293 }
@@ -3294,7 +3294,7 @@
32943294 *q++ = c;
32953295 }
32963296 }
3297- return result;
3297+ return ret;
32983298 }
32993299 #endif /* not GLIB_CHECK_VERSION(2,16,0) */
33003300
@@ -3471,11 +3471,11 @@
34713471 int
34723472 tclosedir (TDIR *nDir)
34733473 {
3474- int result;
3474+ int ret;
34753475
34763476 if (nDir)
34773477 {
3478- result = nDir->hFind == INVALID_HANDLE_VALUE || FindClose (nDir->hFind)
3478+ ret = nDir->hFind == INVALID_HANDLE_VALUE || FindClose (nDir->hFind)
34793479 ? 0 : -1;
34803480 HeapFree (GetProcessHeap (), 0, nDir->lpszPath);
34813481 HeapFree (GetProcessHeap (), 0, nDir);
@@ -3483,10 +3483,10 @@
34833483 }
34843484 else
34853485 {
3486- result = -1;
3486+ ret = -1;
34873487 errno = EFAULT;
34883488 }
3489- return result;
3489+ return ret;
34903490 }
34913491 # endif /* defined (G_OS_WIN32) && ! defined (HAVE_DIRENT_H) */
34923492
@@ -4724,9 +4724,9 @@
47244724 if (!s1 && !s2)
47254725 return 0;
47264726 else if (s1 && !s2)
4727- return -1;
4727+ return G_MININT;
47284728 else if (!s1 && s2)
4729- return 1;
4729+ return G_MAXINT;
47304730 return strcmp (s1, s2);
47314731 }
47324732
@@ -4739,9 +4739,9 @@
47394739 if (!s1 && !s2)
47404740 return 0;
47414741 else if (s1 && !s2)
4742- return -1;
4742+ return G_MININT;
47434743 else if (!s1 && s2)
4744- return 1;
4744+ return G_MAXINT;
47454745 return strncmp (s1, s2, n);
47464746 }
47474747
@@ -4855,9 +4855,9 @@
48554855 if (!s1 && !s2)
48564856 return 0;
48574857 else if (s1 && !s2)
4858- return -1;
4858+ return G_MININT;
48594859 else if (!s1 && s2)
4860- return 1;
4860+ return G_MAXINT;
48614861 return memcmp (s1, s2, n);
48624862 }
48634863
--- tmaid/trunk/misc/misc.h (revision 207)
+++ tmaid/trunk/misc/misc.h (revision 208)
@@ -1,6 +1,6 @@
11 /*
22 misc
3- copyright (c) 1998-2011 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
3+ copyright (c) 1998-2012 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
44
55 This program is free software: you can redistribute it and/or modify
66 it under the terms of the GNU General Public License as published by
@@ -277,6 +277,83 @@
277277 const gboolean flag);
278278
279279
280+/******************************************************************************
281+* *
282+* ja:日時文字列関数群 *
283+* *
284+******************************************************************************/
285+/* ja:日時文字列→日時
286+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
287+ RET,日時 */
288+GDateTime *
289+misc_string_to_time (const gchar *cymdhms);
290+
291+
292+/* ja:日時文字列→日時
293+ datetime,基準となる日時(NULL:現在時刻)
294+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
295+ RET,日時 */
296+GDateTime *
297+misc_string_to_time_datetime (GDateTime *datetime,
298+ const gchar *cymdhms);
299+
300+
301+/* ja:日時文字列→日時
302+ datetime,基準となる日時(NULL:現在時刻)
303+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
304+ sign,デフォルトの符号,NULL:+
305+ RET,日時 */
306+GDateTime *
307+misc_string_to_time_full (GDateTime *datetime,
308+ const gchar *cymdhms,
309+ const gchar sign);
310+
311+
312+/* ja:日時文字列→日時
313+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
314+ sign,デフォルトの符号,NULL:+
315+ RET,日時 */
316+GDateTime *
317+misc_string_to_time_sign (const gchar *cymdhms,
318+ const gchar sign);
319+
320+
321+/* ja:日時文字列→UNIX時間
322+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
323+ RET,日時 */
324+gint64
325+misc_string_to_epoch (const gchar *cymdhms);
326+
327+
328+/* ja:日時文字列→UNIX時間
329+ datetime,基準となる日時(NULL:現在時刻)
330+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
331+ RET,日時 */
332+gint64
333+misc_string_to_epoch_datetime (GDateTime *datetime,
334+ const gchar *cymdhms);
335+
336+
337+/* ja:日時文字列→UNIX時間
338+ datetime,基準となる日時(NULL:現在時刻)
339+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
340+ sign,デフォルトの符号,NULL:+
341+ RET,日時 */
342+gint64
343+misc_string_to_epoch_full (GDateTime *datetime,
344+ const gchar *cymdhms,
345+ const gchar sign);
346+
347+
348+/* ja:日時文字列→UNIX時間
349+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
350+ sign,デフォルトの符号,NULL:+
351+ RET,日時 */
352+gint64
353+misc_string_to_epoch_sign (const gchar *cymdhms,
354+ const gchar sign);
355+
356+
280357 G_END_DECLS
281358
282359
--- tmaid/trunk/misc/fileio.c (revision 207)
+++ tmaid/trunk/misc/fileio.c (revision 208)
@@ -1013,13 +1013,14 @@
10131013 if (!dir)
10141014 return FALSE;
10151015 while (result && (name = g_dir_read_name (dir)))
1016- {
1017- gchar *file;
1016+ if (g_strcmp (name, ".") != 0 && g_strcmp (name, "..") != 0)
1017+ {
1018+ gchar *file;
10181019
1019- file = g_build_filename (path, name, NULL);
1020- result = fileio_remove (file);
1021- g_free (file);
1022- }
1020+ file = g_build_filename (path, name, NULL);
1021+ result = fileio_remove (file);
1022+ g_free (file);
1023+ }
10231024 g_dir_close (dir);
10241025 if (result)
10251026 result = g_rmdir (path) == 0;
--- tmaid/trunk/misc/misc.c (revision 207)
+++ tmaid/trunk/misc/misc.c (revision 208)
@@ -1,6 +1,6 @@
11 /*
22 misc
3- copyright (c) 1998-2011 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
3+ copyright (c) 1998-2012 Kazuki Iwamoto http://www.maid.org/ iwm@maid.org
44
55 This program is free software: you can redistribute it and/or modify
66 it under the terms of the GNU General Public License as published by
@@ -1187,3 +1187,257 @@
11871187 g_free (p);
11881188 return array;
11891189 }
1190+
1191+
1192+/******************************************************************************
1193+* *
1194+* ja:日時文字列関数群 *
1195+* *
1196+******************************************************************************/
1197+/* ja:日時文字列→日時
1198+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1199+ RET,日時 */
1200+GDateTime *
1201+misc_string_to_time (const gchar *cymdhms)
1202+{
1203+ return misc_string_to_time_full (NULL, cymdhms, '+');
1204+}
1205+
1206+
1207+/* ja:日時文字列→日時
1208+ datetime,基準となる日時(NULL:現在時刻)
1209+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1210+ RET,日時 */
1211+GDateTime *
1212+misc_string_to_time_datetime (GDateTime *datetime,
1213+ const gchar *cymdhms)
1214+{
1215+ return misc_string_to_time_full (datetime, cymdhms, '+');
1216+}
1217+
1218+
1219+/* ja:日時文字列→日時
1220+ datetime,基準となる日時(NULL:現在時刻)
1221+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1222+ sign,デフォルトの符号,NULL:+
1223+ RET,日時 */
1224+GDateTime *
1225+misc_string_to_time_full (GDateTime *datetime,
1226+ const gchar *cymdhms,
1227+ const gchar sign)
1228+{
1229+ GDateTime *dt0 = NULL;
1230+
1231+ if (cymdhms)
1232+ {
1233+ GDateTime *dt1;
1234+
1235+ dt1 = datetime ? g_date_time_ref (datetime) : g_date_time_new_now_utc ();
1236+ if (dt1)
1237+ {
1238+ const gchar *p;
1239+
1240+ for (p = cymdhms; g_ascii_isdigit (*p); p++);
1241+ if (*p == '.'
1242+ && g_ascii_isdigit (*(p + 1)) && g_ascii_isdigit (*(p + 2)))
1243+ p += 3;
1244+ if (*p == '\0')
1245+ {
1246+ gsize len;
1247+
1248+ len = p - cymdhms;
1249+ if (len == 8 || len == 10 || len == 11
1250+ || len == 12 || len == 13 || len == 15)
1251+ {
1252+ gint i = 0, year, month, day, hour, minute, second;
1253+
1254+ if (len == 12 || len == 15)
1255+ {
1256+ i = 4;
1257+ year = 0;
1258+ }
1259+ else
1260+ {
1261+ year = g_date_time_get_year (dt1);
1262+ if (len == 10 || len == 13)
1263+ {
1264+ i = 2;
1265+ year /= 100;
1266+ }
1267+ }
1268+ p = cymdhms;
1269+ while (i > 0)
1270+ {
1271+ i--;
1272+ year = year * 10 + g_ascii_digit_value (*p++);
1273+ }
1274+ month = g_ascii_digit_value (*p++) * 10;
1275+ month += g_ascii_digit_value (*p++);
1276+ hour = g_ascii_digit_value (*p++) * 10;
1277+ hour += g_ascii_digit_value (*p++);
1278+ day = g_ascii_digit_value (*p++) * 10;
1279+ day += g_ascii_digit_value (*p++);
1280+ minute = g_ascii_digit_value (*p++) * 10;
1281+ minute += g_ascii_digit_value (*p++);
1282+ if (*p++ == '.')
1283+ {
1284+ second = g_ascii_digit_value (*p++) * 10;
1285+ second += g_ascii_digit_value (*p++);
1286+ }
1287+ else
1288+ {
1289+ second = 0;
1290+ }
1291+ dt0 = g_date_time_new_utc (year, month, day,
1292+ hour, minute, second);
1293+ }
1294+ }
1295+ else if (g_str_has_suffix (cymdhms, "u")
1296+ || g_str_has_suffix (cymdhms, "U"))
1297+ {
1298+ gchar *endptr;
1299+ glong value;
1300+
1301+ value = g_strtol (cymdhms, &endptr, 0);
1302+ if (g_strcasecmp (endptr, "u") == 0)
1303+ dt0 = g_date_time_new_from_unix_utc (value);
1304+
1305+ }
1306+ else
1307+ {
1308+ gchar *tmp;
1309+
1310+ tmp = sign == '-'
1311+ && (*cymdhms == '.' || g_ascii_isdigit (*cymdhms))
1312+ ? g_strconcat ("-", cymdhms, NULL) : g_strdup (cymdhms);
1313+ if (g_str_has_suffix (tmp, "s") || g_str_has_suffix (tmp, "S"))
1314+ {
1315+ gchar *endptr;
1316+ gdouble value;
1317+
1318+ value = g_strtod (tmp, &endptr);
1319+ if (g_strcasecmp (endptr, "s") == 0)
1320+ dt0 = g_date_time_add_seconds (dt1, value);
1321+ }
1322+ else
1323+ {
1324+ gchar *endptr;
1325+ glong value;
1326+
1327+ value = g_strtol (tmp, &endptr, 0);
1328+ if (g_strcasecmp (endptr, "y") == 0)
1329+ dt0 = g_date_time_add_years (dt1, value);
1330+ else if (g_strcmp (endptr, "M") == 0)
1331+ dt0 = g_date_time_add_months (dt1, value);
1332+ else if (g_strcasecmp (endptr, "w") == 0)
1333+ dt0 = g_date_time_add_weeks (dt1, value);
1334+ else if (g_strcasecmp (endptr, "d") == 0)
1335+ dt0 = g_date_time_add_days (dt1, value);
1336+ else if (g_strcasecmp (endptr, "h") == 0)
1337+ dt0 = g_date_time_add_hours (dt1, value);
1338+ else if (g_strcmp (endptr, "m") == 0)
1339+ dt0 = g_date_time_add_minutes (dt1, value);
1340+ }
1341+ g_free (tmp);
1342+ }
1343+ g_date_time_unref (dt1);
1344+ }
1345+ }
1346+ return dt0;
1347+}
1348+
1349+
1350+/* ja:日時文字列→日時
1351+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1352+ sign,デフォルトの符号,NULL:+
1353+ RET,日時 */
1354+GDateTime *
1355+misc_string_to_time_sign (const gchar *cymdhms,
1356+ const gchar sign)
1357+{
1358+ return misc_string_to_time_full (NULL, cymdhms, sign);
1359+}
1360+
1361+
1362+/* ja:日時文字列→UNIX時間
1363+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1364+ RET,日時 */
1365+gint64
1366+misc_string_to_epoch (const gchar *cymdhms)
1367+{
1368+ gint64 epoch = -1;
1369+ GDateTime *dt;
1370+
1371+ dt = misc_string_to_time (cymdhms);
1372+ if (dt)
1373+ {
1374+ epoch = g_date_time_to_unix (dt);
1375+ g_date_time_unref (dt);
1376+ }
1377+ return epoch;
1378+}
1379+
1380+
1381+/* ja:日時文字列→UNIX時間
1382+ datetime,基準となる日時(NULL:現在時刻)
1383+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1384+ RET,日時 */
1385+gint64
1386+misc_string_to_epoch_datetime (GDateTime *datetime,
1387+ const gchar *cymdhms)
1388+{
1389+ gint64 epoch = -1;
1390+ GDateTime *dt;
1391+
1392+ dt = misc_string_to_time_datetime (datetime, cymdhms);
1393+ if (dt)
1394+ {
1395+ epoch = g_date_time_to_unix (dt);
1396+ g_date_time_unref (dt);
1397+ }
1398+ return epoch;
1399+}
1400+
1401+
1402+/* ja:日時文字列→UNIX時間
1403+ datetime,基準となる日時(NULL:現在時刻)
1404+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1405+ sign,デフォルトの符号,NULL:+
1406+ RET,日時 */
1407+gint64
1408+misc_string_to_epoch_full (GDateTime *datetime,
1409+ const gchar *cymdhms,
1410+ const gchar sign)
1411+{
1412+ gint64 epoch = -1;
1413+ GDateTime *dt;
1414+
1415+ dt = misc_string_to_time_full (datetime, cymdhms, sign);
1416+ if (dt)
1417+ {
1418+ epoch = g_date_time_to_unix (dt);
1419+ g_date_time_unref (dt);
1420+ }
1421+ return epoch;
1422+}
1423+
1424+
1425+/* ja:日時文字列→UNIX時間
1426+ cymdhms,[[CC]YY]MMDDhhmm[.ss]文字列,接尾辞YMwDhmsの数値
1427+ sign,デフォルトの符号,NULL:+
1428+ RET,日時 */
1429+gint64
1430+misc_string_to_epoch_sign (const gchar *cymdhms,
1431+ const gchar sign)
1432+{
1433+ gint64 epoch = -1;
1434+ GDateTime *dt;
1435+
1436+ dt = misc_string_to_time_sign (cymdhms, sign);
1437+ if (dt)
1438+ {
1439+ epoch = g_date_time_to_unix (dt);
1440+ g_date_time_unref (dt);
1441+ }
1442+ return epoch;
1443+}
--- tmaid/trunk/configure.ac (revision 207)
+++ tmaid/trunk/configure.ac (revision 208)
@@ -5,7 +5,7 @@
55 dnl version number
66 MAJOR_VERSION=2
77 MINOR_VERSION=7
8-MICRO_VERSION=2
8+MICRO_VERSION=3
99 EXTRA_VERSION=
1010 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
1111
@@ -134,7 +134,7 @@
134134 AC_FUNC_STRCOLL
135135 AC_FUNC_STRFTIME
136136 AC_FUNC_VPRINTF
137-AC_CHECK_FUNCS(clock_gettime flock ftruncate getcwd gettimeofday gmtime_r lstat nanosleep setenv sleep unsetenv usleep utime vasprintf)
137+AC_CHECK_FUNCS(clock_gettime flock ftruncate getcwd gettimeofday gmtime_r lstat nanosleep setenv sleep timegm tzset unsetenv usleep utime vasprintf)
138138
139139 AC_OUTPUT([
140140 Makefile
--- tmaid/trunk/po/ja.po (revision 207)
+++ tmaid/trunk/po/ja.po (revision 208)
@@ -4,9 +4,9 @@
44 #
55 msgid ""
66 msgstr ""
7-"Project-Id-Version: tmaid 2.7.2\n"
7+"Project-Id-Version: tmaid 2.7.3\n"
88 "Report-Msgid-Bugs-To: http://www.maid.org/\n"
9-"POT-Creation-Date: 2012-02-29 02:09+0900\n"
9+"POT-Creation-Date: 2012-03-29 04:54+0900\n"
1010 "PO-Revision-Date: 2002-08-11 18:10+0900\n"
1111 "Last-Translator: Kazuki Iwamoto <iwm@maid.org>\n"
1212 "Language-Team: Kazuki Iwamoto <iwm@maid.org>\n"
@@ -80,7 +80,7 @@
8080 msgid "_Bottom"
8181 msgstr "下(_B)"
8282
83-#: orz/orzpref.c:191 src/tmaid.c:120 src/sigmain.c:317
83+#: orz/orzpref.c:191 src/tmaid.c:120 src/sigmain.c:335
8484 msgid "Window Size"
8585 msgstr "ウインドウのサイズ"
8686
@@ -88,15 +88,15 @@
8888 msgid "Tab Position"
8989 msgstr "タブの位置"
9090
91-#: src/tmaid.c:116 src/sigmain.c:314
91+#: src/tmaid.c:116 src/sigmain.c:332
9292 msgid "History"
9393 msgstr "ファイルの履歴"
9494
95-#: src/tmaid.c:117 src/sigmain.c:315
95+#: src/tmaid.c:117 src/sigmain.c:333
9696 msgid "Caret Position"
9797 msgstr "初期のキャレット位置"
9898
99-#: src/tmaid.c:118 src/sigmain.c:316
99+#: src/tmaid.c:118 src/sigmain.c:334
100100 msgid "New File"
101101 msgstr "新規ファイルを開く"
102102
@@ -104,7 +104,7 @@
104104 msgid "Profile"
105105 msgstr "プロファイル"
106106
107-#: src/tmaid.c:121 src/sigmain.c:318
107+#: src/tmaid.c:121 src/sigmain.c:336
108108 msgid "Open Window"
109109 msgstr "新規ウインドウを開く"
110110
Show on old repository browser