]> www.fi.muni.cz Git - evince.git/blobdiff - backend/dvi/mdvi-lib/util.c
Update FSF address everywhere.
[evince.git] / backend / dvi / mdvi-lib / util.c
index c1cc649e2b427f0421757bf9832df7e160dbf7fc..349d273a2fc4138d22b273761aac313cc832e2ef 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -114,7 +115,7 @@ void        __debug(int mask, const char *format, ...)
 }
 #endif
 
-void   message(const char *format, ...)
+void   mdvi_message(const char *format, ...)
 {
        va_list ap;
        
@@ -131,7 +132,7 @@ void        message(const char *format, ...)
        va_end(ap);
 }
 
-void   crash(const char *format, ...)
+void   mdvi_crash(const char *format, ...)
 {
        va_list ap;
        
@@ -150,7 +151,7 @@ void        crash(const char *format, ...)
        abort();
 }
 
-void   error(const char *format, ...)
+void   mdvi_error(const char *format, ...)
 {
        va_list ap;
        
@@ -166,7 +167,7 @@ void        error(const char *format, ...)
        va_end(ap);
 }
 
-void   warning(const char *format, ...)
+void   mdvi_warning(const char *format, ...)
 {
        va_list ap;
        
@@ -182,7 +183,7 @@ void        warning(const char *format, ...)
        va_end(ap);
 }
 
-void   fatal(const char *format, ...)
+void   mdvi_fatal(const char *format, ...)
 {
        va_list ap;
        
@@ -208,8 +209,8 @@ void        *mdvi_malloc(size_t nelems)
        void    *ptr = malloc(nelems);
        
        if(ptr == NULL)
-               fatal(_("out of memory allocating %u bytes\n"),
-                       (unsigned)nelems);
+               mdvi_fatal(_("out of memory allocating %u bytes\n"),
+                          (unsigned)nelems);
        return ptr;
 }
 
@@ -218,10 +219,10 @@ void      *mdvi_realloc(void *data, size_t newsize)
        void    *ptr;
        
        if(newsize == 0)
-               crash(_("attempted to reallocate with zero size\n"));
+               mdvi_crash(_("attempted to reallocate with zero size\n"));
        ptr = realloc(data, newsize);
        if(ptr == NULL)
-               fatal(_("failed to reallocate %u bytes\n"), (unsigned)newsize);
+               mdvi_fatal(_("failed to reallocate %u bytes\n"), (unsigned)newsize);
        return ptr;     
 }
 
@@ -230,21 +231,21 @@ void      *mdvi_calloc(size_t nmemb, size_t size)
        void    *ptr;
        
        if(nmemb == 0)
-               crash(_("attempted to callocate 0 members\n"));
+               mdvi_crash(_("attempted to callocate 0 members\n"));
        if(size == 0)
-               crash(_("attempted to callocate %u members with size 0\n"),
+               mdvi_crash(_("attempted to callocate %u members with size 0\n"),
                        (unsigned)nmemb);
        ptr = calloc(nmemb, size);
        if(ptr == 0)
-               fatal(_("failed to allocate %ux%u bytes\n"),
-                       (unsigned)nmemb, (unsigned)size);
+               mdvi_fatal(_("failed to allocate %ux%u bytes\n"),
+                          (unsigned)nmemb, (unsigned)size);
        return ptr;
 }
 
 void   mdvi_free(void *ptr)
 {
        if(ptr == NULL)
-               crash(_("attempted to free NULL pointer\n"));
+               mdvi_crash(_("attempted to free NULL pointer\n"));
        free(ptr);
 }
 
@@ -288,6 +289,60 @@ void       *mdvi_memdup(const void *data, size_t length)
        return ptr;
 }
 
+char   *mdvi_strrstr (const char *haystack, const char *needle)
+{
+       size_t i;
+       size_t needle_len;
+       size_t haystack_len;
+       const char *p;
+
+       needle_len = strlen (needle);
+       haystack_len = strlen (haystack);
+
+       if (needle_len == 0)
+               return NULL;
+
+       if (haystack_len < needle_len)
+               return (char *)haystack;
+
+       p = haystack + haystack_len - needle_len;
+       while (p >= haystack) {
+               for (i = 0; i < needle_len; i++)
+                       if (p[i] != needle[i])
+                               goto next;
+
+               return (char *)p;
+
+       next:
+               p--;
+       }
+
+       return NULL;
+}
+
+char   *mdvi_build_path_from_cwd (const char *path)
+{
+       char  *ptr;
+       char  *buf = NULL;
+       size_t buf_size = 512;
+
+       while (1) {
+               buf = mdvi_realloc (buf, buf_size);
+               if ((ptr = getcwd (buf, buf_size)) == NULL && errno == ERANGE) {
+                       buf_size *= 2;
+               } else {
+                       buf = ptr;
+                       break;
+               }
+       }
+
+       buf = mdvi_realloc (buf, strlen (buf) + strlen (path) + 2);
+       strcat (buf, "/");
+       strncat (buf, path, strlen (path));
+       
+       return buf;
+}
+
 double unit2pix_factor(const char *spec)
 {
        double  val;