view anagram/support/port.cpp @ 8:ec2b657edf13

Add explicit lint-comment-style fallthrough annotations. GCC now assumes that if you don't have these you're making a mistake, which is annoying. XXX: This changeset updates the AG output files only (by hand) and is XXX: abusive - rebuilding them will erase the change. However, I need XXX: to get things to build before I can try to get AG to issue the XXX: annotations itself, so this seems like a reasonable expedient.
author David A. Holland
date Mon, 30 May 2022 23:51:43 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 2006 David A. Holland. All rights reserved.
 * See the file COPYING for license and usage terms.
 *
 * port.cpp - portability file
 */

#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
#include "port.h"

#include "assert.h"

////////////////////////////////////////////////////////////
//
// OS issues
//

#ifdef AG_ON_UNIX

/*
 * This function is standard in most/all DOS compilers and C libraries;
 * I think it originated in Turbo C.
 */
char *strlwr(char *string) {
  for (char *s = string; *s; s++) {
    *s = tolower((unsigned char) *s);
  }
  return string;
}

#endif

////////////////////////////////////////////////////////////
//
// Compiler issues
//

#ifdef __IBMCPP__

/*
 * Obsolete compiler, no snprintf.
 *
 * Ignoring the maximum length is less than desirable but will have to
 * do. This is being used to replace unchecked sprintfs anyway.
 */
int snprintf(char *buf, unsigned maxlen, const char *fmt, ...) {
  va_list ap;
  int ret;

  va_start(ap, fmt);
  ret = vsprintf(buf, fmt, ap);
  va_end(ap);

  /* prevent catastrophe, hopefully */
  assert(ret < 0 || (unsigned)ret < maxlen);

  return ret;
}

#endif /* __IBMCPP__ */