1/* 2 * Copyright (c) Ian F. Darwin 1986-1995. 3 * Software written by Ian F. Darwin and others; 4 * maintained 1995-present by Christos Zoulas and others. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice immediately at the beginning of the file, without modification, 11 * this list of conditions, and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28/* 29 * print.c - debugging printout routines 30 */ 31 32#include "php.h" 33#include "main/snprintf.h" 34 35#include "file.h" 36 37#ifndef lint 38FILE_RCSID("@(#)$File: print.c,v 1.71 2011/09/20 15:28:09 christos Exp $") 39#endif /* lint */ 40 41#include <string.h> 42#include <stdarg.h> 43#include <stdlib.h> 44#ifdef HAVE_UNISTD_H 45#include <unistd.h> 46#endif 47#include <time.h> 48 49#define SZOF(a) (sizeof(a) / sizeof(a[0])) 50 51/*VARARGS*/ 52protected void 53file_magwarn(struct magic_set *ms, const char *f, ...) 54{ 55 va_list va; 56 char *expanded_format; 57 TSRMLS_FETCH(); 58 59 va_start(va, f); 60 vasprintf(&expanded_format, f, va); 61 va_end(va); 62 63 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Warning: %s", expanded_format); 64 65 free(expanded_format); 66} 67 68protected const char * 69file_fmttime(uint32_t v, int local) 70{ 71 char *pp; 72 time_t t = (time_t)v; 73 struct tm *tm; 74 75 if (local) { 76 pp = ctime(&t); 77 } else { 78#ifndef HAVE_DAYLIGHT 79 private int daylight = 0; 80#ifdef HAVE_TM_ISDST 81 private time_t now = (time_t)0; 82 83 if (now == (time_t)0) { 84 struct tm *tm1; 85 (void)time(&now); 86 tm1 = localtime(&now); 87 if (tm1 == NULL) 88 goto out; 89 daylight = tm1->tm_isdst; 90 } 91#endif /* HAVE_TM_ISDST */ 92#endif /* HAVE_DAYLIGHT */ 93 if (daylight) 94 t += 3600; 95 tm = gmtime(&t); 96 if (tm == NULL) 97 goto out; 98 pp = asctime(tm); 99 } 100 101 if (pp == NULL) 102 goto out; 103 pp[strcspn(pp, "\n")] = '\0'; 104 return pp; 105out: 106 return "*Invalid time*"; 107} 108