+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-int main(int ac, char *av[]) {
- size_t len;
- char *s, *t;
-
- s = av[1];
-
- len = strlen(s);
-
- /* If string is a null string, it is unspecified whether the resulting
- * string is '.' or a null string. In either case, skip steps 2 through
- * 6.
- */
- if (len == 0) {
- printf("\n");
- exit(0);
- }
-
- /*
- * If string consists entirely of <slash> characters, string shall be
- * set to a single <slash> character. In this case, skip steps 4 to 6.
- */
- while (*s == '/') {
- s++;
- len--;
- }
-
- if (*s == 0) {
- printf("/\n");
- exit(0);
- }
-
- /* If there are any trailing <slash> characters in string, they shall
- * be removed. */
- for (t = s+len-1; t > s; t--) {
- if (*t != '/') {
- break;
- }
- *t = 0;
- len--;
- }
-
- /* If there are any <slash> characters remaining in string, the prefix
- * of string up to and including the last <slash> character in string
- * shall be removed. */
- for (t=s+len-1; t > s; t--) {
- if (*t == '/') {
- s = t+1;
- break;
- }
- }
-
- len = strlen(s);
- /* If the suffix operand is present, is not identical to the characters
- * remaining in string, and is identical to a suffix of the characters
- * remaining in string, the suffix suffix shall be removed from string.
- * Otherwise, string is not modified by this step. It shall not be
- * considered an error if suffix is not found in string.
- */
- if (ac > 2) {
- size_t suflen;
- suflen = strlen(av[2]);
- if (suflen <= len && !strcmp(av[2], s+len-suflen)) {
- len -= suflen;
- *(s+len) = 0;
- }
- }
-
- printf("%s\n", s);
- return 0;
-}